异步array.map返回未定义

时间:2020-05-19 05:29:02

标签: javascript asynchronous array.prototype.map node-fetch

无论我做什么,我都不知道为什么我的异步映射获取函数返回一个未定义值或“ 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)

1 个答案:

答案 0 :(得分:0)

您需要更改

await fetch(book.imageURL)

return fetch(book.imageURL)

getImageRef()函数中。

这样,docs将等于getImageRef()返回的值。这是必需的,因为await本身不会导致整个getImageRef()函数返回任何内容。该函数返回return关键字之后的内容,如果没有提供,则返回undefined之后的所有内容-这就是undefined的来源。