Nodejs异步编程 - 为什么有" async"模块需要?什么是" Callback Hell" /"厄运金字塔"?

时间:2016-11-07 04:41:54

标签: javascript node.js asynchronous async.js

NodeJS最重要的功能之一就是我正在阅读的asynchronous开箱即用,但作为NodeJS它的初学者#{1}}&#39}。如果已经在本地处理这个模块,那么为什么存在像async这样的模块会有点混乱?

https://www.npmjs.com/package/async

我认为有充分的理由,但这对我来说并不明显。是处理callback hell还是Pyramid of Doom

2 个答案:

答案 0 :(得分:8)

阅读说明:

  

Async是一个实用程序模块,它提供了直接,强大的功能,用于处理异步JavaScript

它不“提供”异步函数,它提供了使用异步javascript的函数。

注意:javascript 都是异步的,只是异步部分是异步的。

换句话说

  

async不会使nodejs异步,它使得使用异步代码更容易通过其糖衣涂层的优点

答案 1 :(得分:2)

  

NodeJS中使用异步编程时,可能会结束   当你有更多的异步函数被一个接一个地调用时,Callback HellPyramid of Doom如下所示。

回调 - 异步执行第一个函数后,应该通知主线程。您正在为其传递函数callback,该函数将在异步操作完成后触发。

当你在链中或在一个大循环中有更多的异步函数时,你可能必须传递相同数量的回调来找出每个操作的完成,而最后一个回调来执行其他的东西,比如返回响应等

当您使用更多回调对它们进行编码时,它变得非常难以管理/维护,并且缺乏更好的可读性,如下所示。

getData(function(a){  
    getMoreData(a, function(b){
        getMoreData(b, function(c){ 
            getMoreData(c, function(d){ 
                getMoreData(d, function(e){ 
                    ...
                });
            });
        });
    });
});
  

摆脱这些缺点并提高可读性   维护,我们可以使用其他模块,例如asyncbluebird   你可以选择你喜欢的任何东西,这对你来说似乎更好   在理解和满足所有要求方面没有   使事情变得太复杂。

无论如何,这完全取决于callback hell或其他模块。

要深入了解,

https://strongloop.com/strongblog/node-js-callback-hell-promises-generators/