如何使用Promises.all和async/await



我正在使用Botpress来处理这件事,但我犯了一些基本的Javascript错误,因为我试图将Promises和Await/Async结合起来。任何关于如何纠正这一问题的帮助都将是惊人的

这是我的代码

const knex = await bp.db.get();
const userIds = await knex('_students').distinct('id').pluck('id');
return Promise.all(
userIds.map((userId) => {
return await bp.dialogEngine.jumpTo(userId, 'question.flow.json')
}
)
);

这是我得到的错误:

SyntaxError: await is only valid in async function

我如何使代码在返回语句中使用等待,因为我需要按照Botpress API

您可以按如下方式添加async

async (userid) => {...}`
^

但是,您可以直接从jumpTo(...)使用Promise,然后返回Promise.all(...)

const knex = await bp.db.get();
const userIds = await knex('_students').distinct('id').pluck('id');
const promises = userIds.map((userId) => {
return bp.dialogEngine.jumpTo(userId, 'question.flow.json')
});
return Promise.all(promises);

您不需要在此处使用await

const knex = await bp.db.get();
const userIds = await knex('_students').distinct('id').pluck('id');
return Promise.all(
userIds.map((userId) => {
return bp.dialogEngine.jumpTo(userId, 'question.flow.json')
}
)
);

只需返回一个promise数组,您就会在从Promise.all解析的数组中获得一个解析值。

await有效,或者只能与async函数一起使用。请记住,async总是返回一个promise并等待解决这个promise并提取值。为此,您需要将代码封装在类似的异步函数中

const async_await_promise = async function(){
const knex = await bp.db.get();
const userIds = await knex('_students').distinct('id').pluck('id');
return await Promise.all(
userIds.map((userId) => {
return await bp.dialogEngine.jumpTo(userId, 'question.flow.json')
}))
}
async_await_promise ();

最新更新