我如何同步等待多个promises? [语法错误:await是保留字]

时间:2017-05-26 08:33:42

标签: javascript asynchronous promise async-await

我正在查询airtable的一些数据,这些数据基本上是书籍和相关作者的数据库。每本书记录都有一个authorId字段,我必须单独查询以获取相关的作者数据。

以下是我首先获得所有书籍的方法:

let books = await axios.get("https://api.airtable.com/v0/appGI25cdNsGR2Igq/Books?&view=Main%20View")
let authorIds = books.data.records.map( ( book) => book.fields.Author[0] )

这有效,我得到这些作者ID:

[ 'recNLaQrmpQzfkOZ1',
  'recmDfVxRp01x85F9',
  'recKQqdJ9a2pHnF2z',
  'recKMiDhdCUxfdPSY',
  'rec67WoUDFjFMrw44' ]

现在我想将此数据发送到getAuthors函数,如下所示:

const getAuthors = async (authorIds) => {
  authorIds.map( id => await Promise.all([
    return axios.get(`https://api.airtable.com/v0/appGI25cdNsGR2Igq/Authors/${id}`
  ])))
}

这个函数应该是我的相关作者数据,但我得到一个错误:

Syntax Error: await is a reserved word

...在这一行:authorIds.map( id => await Promise.all([...

我做错了什么,是否有办法解决这个问题?

1 个答案:

答案 0 :(得分:4)

您已将await放置在map回调函数中,而不是声明为async的函数中。你会想要使用

async function getAuthors(authorIds) {
  await Promise.all(authorIds.map(id =>
    axios.get(`https://api.airtable.com/v0/appGI25cdNsGR2Igq/Authors/${id}`)
  ));
}

虽然可能最好用await替换return