[英]How to rewrite a function using Promises.all to async and await
[英]How to use Promises.all and async/await
我正在使用Botpress来处理此问题,但由于要尝试将Promises和Await / Async结合在一起,因此我犯了一些基本的Javascript错误。 任何有关如何纠正此问题的帮助都将是惊人的
这是我的代码
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
我如何使代码在return语句中与等待中的代码一起工作,因为根据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
这里使用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.all
数组,您将在Promise.all
解析的数组中获得一个解析值。
await有效或仅可与async功能一起使用。 记住,异步总是返回一个promise,等待解决这个promise并提取值。 为此,您需要将代码包装在async函数中,例如
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 ();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.