2017-05-26 36 views
0

我在查询airtable的一些数据,这些数据基本上是书籍和相关作者的数据库。每本书籍都有一个authorId字段,我必须单独查询才能获取相关的作者数据。我如何异步同时等待多个承诺? [语法错误:await是保留字]

这里是我得到的所有的书第一:

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}` 
    ]))) 
} 

这个函数应该让我知道我的相关作者数据,但是我得到了一个呃ROR:

Syntax Error: await is a reserved word 

...在这条线:authorIds.map(id => await Promise.all([...

我在做什么错的,是有办法解决这一问题?

+0

我的巴贝尔设置工作正常,我使用了预先配置用于翻译等的next.js。此外,第一次请求书的作品很好,这意味着异步不是问题 –

+0

更新了我得到错误的行:'authorIds .map(id =>等待Promise.all([' –

+0

为什么你需要async/await + promises?这是两种不同的模式来管理异步代码。 – Booster2ooo

回答

4

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

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

虽然可能更好地return更换await