我最近开始使用NodeJS和MongoDB(使用Monk)。这是当我遇到“回拨地狱”这个词。在我的代码中,我正在做同样的事情。对于一个示例 -回调地狱和嵌套承诺之间的区别
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
})
})
})
这是当我开始阅读的“承诺”,我碰到这个文章来了 - https://strongloop.com/strongblog/promises-in-node-js-with-q-an-alternative-to-callbacks/
因为我需要第三回调之内的两次文档和docs1所以我用嵌套的承诺。
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
})
})
})
从上面的代码片段,我有以下问题(/疑惑):
- 除了使代码更易读,并承诺具有性能优势?
- 嵌套承诺和回调地狱看起来与我相似。实际上有什么区别吗?
我对这个承诺的概念很陌生。任何帮助表示赞赏。
从技术上讲,你的嵌套承诺仍然使用回调,从而重新创建“回调地狱”。这次更多的代码。 – 2015-04-01 13:10:29
那么如果我使用承诺并且如果我想使用文档,docs1,docs2,那么是否有避免回调地狱的方法? – Zee 2015-04-01 13:20:23
@用户 - 看看我更新的答案中的一些链接。 – 2015-04-01 14:18:34