我想使用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();
});
答案 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()