从使用await的代码创建承诺

时间:2018-06-04 09:22:30

标签: node.js promise async-await

我想使用await语法编写一个代码块,立即执行它,并创建一个等待执行完成的promise。我已经提出了以下方法来做到这一点。

let makePromise = async () => {
    return foo && await bar();
}
let promise = makePromise();

然而,我发现这很难阅读和理解。创建一个函数然后立即调用它似乎是违反直觉的,并且违背了其他编程语言的良好实践。是否有更惯用的方式来编写这段代码?

特别是,此代码用于以下上下文。

let promises = items.map((item) => {
    let makePromise = async () => {
        return foo(item) && await bar(item);
    }
    return makePromise();
});

2 个答案:

答案 0 :(得分:1)

为什么不直接使用异步功能?以下代码的行为与您的示例完全相同,但请记住,这会产生一系列承诺,而await则不会产生任何承诺。

function foo(x) { return "foo " + x; }
async function bar(x) { return "bar " + x; }
const items = [1];

let promises = items.map(
    async item => foo(item) && await bar(item)
);

Promise.all(promises).then(x => console.log(x));

答案 1 :(得分:0)

异步函数实际上返回一个Promise。这是有效的:

const x = async () => {
  console.log(123)
}

x().then(() => {
  console.log(456)
})

所以在你的情况下:

let promise = bar()