无论我做什么,我都不知道为什么我的异步映射获取函数返回一个未定义值或“ Promise {}”数组。我的getImageRef函数可以正常工作(我尝试通过去除一些位来简化它),但是如何获取它以将值返回给formatBooks中的Promise.all?
const inventory = [
{
"isbn":"foo",
"title":"bar",
"imageURL":"http://web.com/image.jpg"
}
]
const getImageRef = async book => { //this part works on its own
await fetch(book.imageURL)
.then(res => res.buffer())
.then(buffer => client.assets.upload('image', buffer))
.then(assetDocument => {
let book.imageRef = assetDocument._id
return book
})
.catch(() => {
console.error('Error: ' + book.image)
return book
})
}
async function formatBooks (inventory) {
await Promise.all(inventory.map(async book => {
const docs = await getImageRef(book) // 'docs' returns as undefined
})
).then(function(docs) {
uploadBooks(docs)
})
}
function uploadBooks (documents) {
console.log(documents)
}
formatBooks(data)
答案 0 :(得分:0)
您需要更改
await fetch(book.imageURL)
到
return fetch(book.imageURL)
在getImageRef()
函数中。
这样,docs
将等于getImageRef()
返回的值。这是必需的,因为await
本身不会导致整个getImageRef()
函数返回任何内容。该函数返回return
关键字之后的内容,如果没有提供,则返回undefined
之后的所有内容-这就是undefined
的来源。