2016-06-06 3 views
1

Я новичок в nodejs, я делаю несколько запросов на получение с запросом nodejs api, с этим, я не могу определить выход конкретного запроса. Как идентифицировать ответ каждого запроса индивидуально? Я использую for loop для отправки нескольких запросов. Если я использую рекурсию, она снова становится синхронной, мне просто нужно отделить запрос с ответом, который слишком асинхронен. Является ли это возможным ?Nodejs Идентифицировать вывод asyntasks

В приведенной ниже переменной кода «i» заменяется последней итерацией.

var list = [ 'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%20Mobiles%20with%20best&phrase2=Mobiles%20with%20best', 
     'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%2520Mobiles%2520with%2520best&phrase2=what%20is%20a%20processor'] 

function ss(list){ 
    for(var i in list) { 
     request(list[i], function (error, response, body) { 
      if (!error && response.statusCode == 200) { 
       console.log(i + " " +body); 
      } 
     }) 
    } 
} 

ответ

1

Вы можете использовать async library для выполнения асинхронных запросов. Реально, вы можете использовать async.each или async.eachSeries.

Разница между 2 из них является то, что each будет работать все запросы параллельно, так же, как цикл for делает, но сохранит контекст, в отличие от eachSeries, которая будет выполняться запросы по одному за раз (второй итерации начнется только тогда, когда вы вызываете функцию обратного вызова первого). Кроме того, существуют другие варианты более конкретных случаев использования (например, eachLimit).

пример код с использованием each:

var list = [ 'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%20Mobiles%20with%20best&phrase2=Mobiles%20with%20best', 
     'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%2520Mobiles%2520with%2520best&phrase2=what%20is%20a%20processor'] 

function ss(list){ 
    async.each(list, function(listItem, next) { 
     request(listItem, function (error, response, body) { 
      if (!error && response.statusCode == 200) { 
       console.log(listItem + " " +body); 
      } 

      next(); 
      return; 
     }) 
    }, 
    //finally mehtod 
    function(err) { 
     console.log('all iterations completed.') 
    }) 
} 
+0

Его работа, как синхронные, принимая время для всех ответов. можем ли мы идентифицировать ответ для конкретного запроса асинхронным образом, например, код @Gilad Bison? –

+1

Как я описал выше - вы можете использовать каждый вместо eachSeries. Я отредактировал ответ –

+0

его работал ... tq tq –