Node.js 从使用wait的代码创建承诺

Node.js 从使用wait的代码创建承诺,node.js,promise,async-await,Node.js,Promise,Async Await,我想使用wait语法编写一段代码,立即执行它,并创建一个等待执行完成的承诺。我想出了以下方法来做这件事 let makePromise = async () => { return foo && await bar(); } let promise = makePromise(); 然而,我发现这很难阅读和理解。创建一个函数,然后立即调用它似乎是违反直觉的,并且与其他编程语言中的良好实践背道而驰。有没有更惯用的方法来编写这段代码 特别是,此代码在以下上下文中使用

我想使用wait语法编写一段代码,立即执行它,并创建一个等待执行完成的承诺。我想出了以下方法来做这件事

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();
});

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

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

x().then(() => {
  console.log(456)
})
因此,在你的情况下:

let promise = bar()

为什么不直接使用异步函数呢?下面的代码的行为与您的示例完全相同,但请记住,这会导致一系列承诺,而
wait
s没有一个承诺

函数foo(x){返回“foo”+x;}
异步函数条(x){返回“条”+x;}
常量项=[1];
让承诺=items.map(
异步项=>foo(项)和等待栏(项)
);

然后(x=>console.log(x))这是唯一的方法。为什么不将临时功能提升到模块级别,并根据其职责和业务价值为其命名?一般来说,将代码拆分为多个具有合理名称的函数被认为是一种良好的做法。异步函数实际上会返回一个承诺<代码>常量x=async()=>{console.log(123)};x、 然后(()=>console.log(456))
您应该在
makePromise()
处尝试
wait
ing,如下所示:
let-makePromise=async()=>{return foo&&bar();}let-promise=wait-makePromise()@TamasHegedus通常情况下可能是这样,但在我的情况下不是这样。我将为问题添加一些上下文,以明确为什么您的解决方案在我的案例中不起作用。这也可能使回答这个问题更容易。可能是重复的。我个人的经验教训是:当我以这样的代码结束时,我可能应该试着看看周围的代码,看看是否可以将异步声明“进一步向外”移动,如本例中的映射回调。您还可以在线找到
.map
函数的异步版本,因此,最终您可以获得与旧同步版本非常相似的顺序执行和控制流。