填充位于回调函数范围之外的数组

时间:2017-12-02 07:04:52

标签: javascript node.js callback

给定一个表示项目ID的字符串数组,我想遍历字符串,从我的数据库中提取项目对象,并将项目对象添加到数组中,该数组位于数据库回调范围之外。

function getItemObjects(items, callback) {
  let returnItems = [];
  items.forEach((i) => {
    Item.getItemById(i, (err, item) => {
      if (err) {
        console.log(err);
        return;
      } else {
        returnItems.push(item);
      }
    });
  });
  callback(returnItems);
}

Item.getItemById()是我的Item模型中的一个函数,它从mongo数据库中获取对象。如何填充超出该回调函数范围的数组?

当我从getItemObjects()函数获得回调值时,值只是[]。但是,如果我在for循环中记录它的值,则会正确填充它。

1 个答案:

答案 0 :(得分:1)

您可以使用promises从数据库回调中提取值。

试试这个:



function getItemObjects(items, callback) {
  const itemPromises = items.map((itemId) => {
    return new Promise((resolve, reject) => {
      Item.getItemById(itemId, (err, item) => {
        if (err) {
          reject(err);
        }
        resolve(item);
      });
    });
  });

  Promise.all(itemPromises)
    .then(results => callback(results))
    .catch(error => callback(error));

}




注意这里,如果任何一个项导致错误,那么整个promise(来自Promise.all)将失败并且catch块将被执行。

您可以在Promise.allPromise.catch

上找到更多信息