Javascript 填充位于回调函数范围之外的数组
给定一个表示项ID的字符串数组,我希望遍历字符串,从数据库中提取项对象,并将项对象添加到数组中,该数组位于数据库回调的范围之外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);
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下的回调中,但之后它会正常工作。感谢您的指出。我已经用你的评论更新了代码。