我正面临async.js
的一个奇怪问题。我正在解释整个场景。我在数据库里有两张表。设一个是具有5行的CCD_ 2,另一个为具有2840行的CCD_。由于我的项目在sails.js
中,我使用waterline
作为ORM。我在async.series
中运行三个函数。第一个用于从表X
获取所有行,第二个用于从Y
获取所有行。在第三个函数中,我在第二个函数中获取的Y
的所有行上运行async.eachSeries
,并调用外部POST api。所以整个流程是,
async.series([
function( callback1 ){
// Fetch all rows from `X`
},
function( callback1 ){
// Fetch all rows from `Y`
},
function( callback1 ){
async.eachSeries(allRowsOfY, function(item, callback2){
// Call an external POST api.
},
function(err){
});
},
],
function( err ){
// Do something
});
问题是,即使Y
有2840行,也只进行了大约600个api调用,那么async.series
从第一个开始就开始运行。这件事一直在发生。为什么会发生这种事?
当您拥有所有需要的数据时,将async.series移动到回调部分
async.series([
function(callback) {
// Fetch all rows from `X`
callback(null, 'one');
},
function(callback) {
// Fetch all rows from `Y`
callback(null, ['two', 'three', 'four']);
}
],
function(err, allRowsOf) {
async.eachSeries(allRowsOf[1], function(item, callback) { // take second element from array of results creates by async.series
console.log('call external POST API with: ', item)
callback() // call callback without error if everything is OK
},
function(err) {
if (err) console.log('error', err)
});
});