我最近開始使用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