1

我尝试获取 ID 为 1、100、1000 的 3 个文档。但 node.js 是异步的,结果中的数组对象为空。如何将文件放入数组?

var objects = {};
var objectsID = [1, 100, 1000];
objectsID.forEach( function( elem ){
  objectsDB.get( elem, function( err, object ){
    objects[elem] = object;
   })
 });
 console.log(objects);

console.log 返回 {}。

4

1 回答 1

2

所以这是一个经典的异步代码问题。您的代码可以这样重写:

var objects = {};
var objectsID = [1, 100, 1000];

var finalize = function( ) {
    console.log(objects);
};

objectsID.forEach( function( elem ){
    objectsDB.get( elem, function( err, object ){
        objects[elem] = object;

        // remove ID from the list of IDs
        var idx = objectsID.indexOf(elem);
        if (idx!=-1) {
            objectsID.splice(idx, 1);
        }

        // check if it is time to finalize
        if (!objectsID.length) {
            finalize();
        }
    })
});

您可能还想看看Caolan 的 async.js 库(尤其是 async.parallel )。

于 2013-02-14T10:37:44.650 回答