我正在使用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 ();