我从数据库中获得一本书的列表,作为一个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
})
}