항목 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()는 몽고 데이터베이스에서 개체를 가져옵니다 내 항목 모델 내에서 기능입니다. 해당 콜백 함수의 범위를 벗어나는 배열을 채우려면 어떻게해야합니까?
getItemObjects() 함수에서 콜백 값을 가져올 때 그 의미는 바로 그 값입니다. 그러나 for 루프 내에 값을 기록하면 제대로 채워집니다.
그냥'콜백 (returnItems) 전에 returnItems''에서 무엇을 얻을 수 있습니까에 대한 자세한 내용을 찾을 수'실행? –
그냥 빈 배열을 반환합니다. 내가 Item.getItemById() 콜백 함수의 범위 밖에서 참조 할 때마다 그것은 비어 있습니다. 그 함수를 떠날 때 다시 설정되는 것과 같습니다. – Darren
약속 사용은 아이디어처럼 들리 -이 질문은 속임수라고 생각합니다. https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call – mplungjan