如何使用Promises.all和async / await

时间:2018-11-03 02:42:53

标签: javascript 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

3 个答案:

答案 0 :(得分:1)

您可以添加x,如下所示:

async

但是,您可以直接从async (userid) => {...}` ^ 使用Promise,然后返回jumpTo(...)

Promise.all(...)

答案 1 :(得分:1)

您无需在此处使用JavaPairRDD<String, Iterable<String>> links = lines.mapToPair(s -> { String[] parts = COLONS.split(s); String[] outGoingLinks = SPACES.split(parts[1]); return new Tuple2<>(parts[0], parts[1]); }).distinct().groupByKey().cache();

await

只需返回一个promise数组,您将在从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') } ) ); 解析的数组中获得一个解析的值。

答案 2 :(得分:0)

await有效,或者您只能与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 ();