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

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

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数据库中获取对象。 我如何填充超出该callback函数范围的数组?

当我从getItemObjects()函数获取callback值时,值就是[]。 但是,如果我将它的值logging在for循环中,它将被正确填充。

您可以使用promise从数据库callback中提取值。

尝试这个:

 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)); }