Node.js 从使用wait的代码创建承诺
我想使用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(); 然而,我发现这很难阅读和理解。创建一个函数,然后立即调用它似乎是违反直觉的,并且与其他编程语言中的良好实践背道而驰。有没有更惯用的方法来编写这段代码 特别是,此代码在以下上下文中使用
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
函数的异步版本,因此,最终您可以获得与旧同步版本非常相似的顺序执行和控制流。