アイテム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()は、アイテムモデル内でmongoデータベースからオブジェクトを取得する関数です。どのようにして、そのコールバック関数の範囲外の配列に値を設定できますか?
getItemObjects()関数からコールバック値を取得したときの値は、[]です。しかし、私はそれの値をforループの中に記録すると、それは適切に設定されます。
の詳細を見つけることができます; '実行されますか? –
空の配列を返します。私がItem.getItemById()コールバック関数の範囲外で参照するときはいつでも空です。その関数を終了するとリセットされるようです。 – Darren
約束を使用することはアイデアのように思えます。この質問は、https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-callの欺瞞だと思います – mplungjan