gpt4 book ai didi

javascript - 回调 hell 和嵌套 promise 之间的区别

转载 作者:行者123 更新时间:2023-11-30 10:05:29 24 4
gpt4 key购买 nike

我最近开始使用 NodeJS 和 MongoDB(使用 Monk)。这是我遇到“回调 hell ”一词的时候。在我的代码中,我正在做同样的事情。举个例子-

DBCall(d1, function(e, docs){
if(docs.length!=0)
DBCall(d2, function(e, docs1){
if(docs1.length!=0)
DBCall(d3, function(e, docs2){
//doing something with docs,docs1,docs2
})
})
})

这是我开始阅读“ promise ”的时候,我看到了这篇文章 - https://strongloop.com/strongblog/promises-in-node-js-with-q-an-alternative-to-callbacks/

因为我在第三个回调中同时需要 docs 和 docs1,所以我使用了嵌套的 promises。

DBCall(d1)
.then(function(docs){
if(docs.length!=0)
return DBCall(d2)
.then(function(docs1){
if(docs1.length!=0)
return DBCall(d3)
.then(function(docs2){
//doing something with docs,docs1,docs2
})
})
})

从上面的代码片段我有以下问题(/疑问):

  1. 除了使代码更具可读性之外,promises 是否具有性能优势?
  2. 嵌套 promise 和回调 hell 与我相似。实际上有什么区别吗?

我对 promise 这个概念很陌生。任何帮助表示赞赏。

最佳答案

Apart from making the code more readable, does promises have performance benefits?

可能不会。

Nesting promises and callback hell looks similar to me. Is there actually any difference?

Promises 不会自动防止回调 hell 。但因为它们比“简单”的回调更灵活,所以可以用不同的方式组合它们,从而更容易避免回调 hell 。


Since I needed both docs and docs1 inside the third callback so I used nested promises.

有时嵌套的 promise 是不可避免的。但是,如果它们不需要按顺序执行,则无需嵌套它们。您可以并行执行它们:

Promise.all([
DBCall(d1),
DBCall(d2),
DBCall(d3)
]).then(function(docs) {
// docs is an array: [docs, docs1, docs2]
});

关于javascript - 回调 hell 和嵌套 promise 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29391708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com