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

Javascript 填充位于回调函数范围之外的数组,javascript,node.js,callback,Javascript,Node.js,Callback,给定一个表示项ID的字符串数组,我希望遍历字符串,从数据库中提取项对象,并将项对象添加到数组中,该数组位于数据库回调的范围之外 function getItemObjects(items, callback) { let returnItems = []; items.forEach((i) => { Item.getItemById(i, (err, item) => { if (err) { console.log(err);

给定一个表示项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);
}
getItemById()是我的项目模型中的一个函数,它从mongo数据库获取对象。如何填充该回调函数范围之外的数组


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

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

试试这个:

函数getItemObjects(项,回调){ const itemPromissions=items.map((itemId)=>{ 返回新承诺((解决、拒绝)=>{ Item.getItemById(itemId,(err,Item)=>{ 如果(错误){ 拒绝(错误); } 解决(项目); }); }); }); 承诺。全部(项目承诺) .然后(结果=>回调(结果)) .catch(错误=>回调(错误));
}returnItems
callback(returnItems)之前,您在
returnItems中得到了什么是否执行?它只返回一个空数组。每当我在Item.getItemById()回调函数的作用域之外引用它时,它都是空的,就像我离开该函数时它会重置一样。使用承诺听起来像是一个想法-我认为这个问题是对谢谢的重复,效果很好。我不得不将项作为参数添加到.then下的回调中,但之后它会正常工作。感谢您的指出。我已经用你的评论更新了代码。