Node.js:在继续之前等待循环中的callback

我有一个循环,它有一个asynchronous调用,callback。 为了能够继续前进,我需要callback来触发整个循环,然后显示循环的结果。

我试图控制这种方式的每一个方法都行不通(尝试过Step,Tame.js,async.js等等) – 关于如何前进的build议?

array = ['test', 'of', 'file']; array2 = ['another', 'array']; for(i in array) { item = array[i]; document_ids = new Array(); for (i2 in array2) { item2 = array2[i2]; // look it up mongodb.find({item_name: item2}).toArray(function(err, documents { // because of async, // the code moves on and calls this back later console.log('got id'); document_ids.push(document_id); })) } // use document_ids console.log(document_ids); // shows [] console.log('done'); } // shows: // [] // done // got id // got id 

在callback触发之前,您正在loggingdocument_ids。 你必须跟踪你已经完成了多less次callback。

一个简单的方法是使用一个计数器,并检查每个callback计数。

以你为例

 var array = ['test', 'of', 'file']; var array2 = ['another', 'array']; var document_ids = []; var waiting = 0; for(i in array) { item = array[i]; for (i2 in array2) { item2 = array2[i2]; waiting ++; mongodb.find({item_name: item2}).toArray( function(err, document_id) { waiting --; document_ids.push(document_id); complete(); }) ); } } function complete() { if (!waiting) { console.log(document_ids); console.log('done'); } }