2015-12-06 3 views
1

У меня есть этот массив покоя API путей:Использование асинхронной с http.get, узел JS

var paths = ['path1','path2','path3']; 

Я хочу, чтобы создать массив с результатами каждого пути. В этом случае я вместо того, чтобы использовать «http://www.google.com/index.html» вместо «пути»

exports.test = function(req, res){ 

    var paths = ['path1','path2','path3']; 

    var resultArr = []; 
    async.each(paths, function(path, cb){ 

    console.log('collecting data from: ' + path); 
    http.get('http://www.google.com/index.html', function(result){ 

     resultArr.push(result); 
     console.log('Done collecting data from: ' + path); 
     cb(); 
    }); 

    }, function(){ 
    console.log('Done collecting data from all paths'); 
    res.status(200).send('hello'); 
    }); 
}; 

Это журналы:

Starting server at 127.0.0.1:5000 
collecting data from: path1 
collecting data from: path2 
collecting data from: path3 
Done collecting data from: path2 
Done collecting data from: path1 
Done collecting data from: path3 
Done collecting data from all paths 
GET /test 304 128.752 ms - - 

Он не ждет для вызова, чтобы закончить. Я хочу получить результаты последовательно, один за другим. Что я делаю не так?

+1

Вы код ведут себя правильно, что вы ожидали здесь должно произойти? – Cyrbil

+0

«Обратите внимание, что, поскольку эта функция применяет итератор к каждому элементу параллельно, нет гарантии, что функции итератора будут завершены по порядку». - https://www.npmjs.com/package/async#each – TAGraves

ответ

2

каждый до каждыйSeries.

exports.test = function(req, res){ 

    var paths = ['path1','path2','path3']; 

    var resultArr = []; 
    async.eachSeries(paths, function(path, cb){ 

    console.log('collecting data from: ' + path); 
    http.get('http://www.google.com/index.html', function(result){ 

     resultArr.push(result); 
     console.log('Done collecting data from: ' + path); 
     cb(); 
    }); 

    }, function(){ 
    console.log('Done collecting data from all paths'); 
    res.status(200).send('hello'); 
    }); 
}; 

Это журналы:

collecting data from: path1 
Done collecting data from: path1 
collecting data from: path2 
Done collecting data from: path2 
collecting data from: path3 
Done collecting data from: path3 
Done collecting data from all paths 
Смежные вопросы