gpt4 book ai didi

javascript - 在 forEach 循环中等待 promise

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:55:23 25 4
gpt4 key购买 nike

我收到来自数据库的图书列表作为 Promise。

如果初始书籍列表成功加载,则通过将书籍传递给实用函数来进一步处理这些书籍。

实用程序函数内部是一个 forEach 循环,它遍历每本初始书籍,进行异步调用以获取附加信息,创建一个新书籍对象并将其添加到新书籍数组(称为 updatedBooks).

问题:我不知道如何等到 forEach 循环完成每本书以及如何返回新书数组。

目前,我只有一本更新的书,而不是全部

我的最终目标是在 res.json() 对象中包含更新书籍的列表

这是我目前的结构

controller.find(req.query)
.then(function (entities) {
awsUtil.addInfo(entities)
.then(function (updatedBooks) {
res.json({
confirmation: "success",
result: updatedBooks
})
})
.catch(function (err) {
res.json({
confirmation: "fail",
message: err
})
})
})
.catch(function (err) {
res.json({
confirmation: "fail",
message: err
})
})

从MongoDB获取初始书籍的函数

find: function (params) {
return new Promise(function (resolve, reject) {
Book.find(params, function (err, books) {
if (err) {
reject(err)
return
}

console.log("Org. Books List: ", books)
resolve(books);
})
})
}

获取额外信息并返回新的书籍数组的实用函数

addInfo: function (books) {
return new Promise(function (resolve, reject) {
let updatedBooks = [];

books.forEach(function (book) {
client.itemLookup({ //Call Amazon API to get book info
idType: 'ISBN',
itemId: book.isbn,
responseGroup: 'ItemAttributes,Images'
})
.then(function (results) {
const updatedBook = {
// The additional info from result gets added here
}

updatedBooks.push(updatedBook);
}).catch(function (err) {
console.log(err);
reject(err)
});
})
resolve(updatedBooks) //Return the array of new books
})
}

最佳答案

修改 addInfo 方法,将 promise 存储在一个数组中,并返回 Promise.all,当所有 promise 都已解决时,它将解决。

假设你的方法返回一个 promise,看起来它们确实返回了一个 promise,比如

addInfo: function(books) {
let promises = books.map(function(book) {
return client.itemLookup({
idType : 'ISBN',
itemId : book.isbn,
responseGroup : 'ItemAttributes,Images'
}).then(function(results) {
return {
// The additional info from result gets added here
}
});
})
return Promise.all(promises); // catch errors where you call "addInfo"
}

关于javascript - 在 forEach 循环中等待 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46027244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com