繁体   English   中英

如何使用Promises.all和async / 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM