Nodejsasynchronous编程 – 为什么需要“asynchronous”模块? 什么是“回拨地狱”/“厄运金字塔”?
NodeJS
最大的特点之一就是它与我正在阅读的内容是不asynchronous
的,但是作为NodeJS
的初学者,如果这个模块已经在本地处理了,为什么会有类似async
模块呢?
https://www.npmjs.com/package/async
我认为有一个很好的理由,但对我来说并不明显。 是处理callback hell
还是Pyramid of Doom
?
当您在
NodeJS
使用asynchronous编程时,如果您有更多数量的asynchronous函数被一个接一个地调用,那么您最终可能会遇到“Callback Hell
或Pyramid of Doom
。
callback – 一旦你的第一个函数asynchronous执行,你的主线程应该被通知它。 为此,您将传递一个函数作为callback
,一旦asynchronous操作完成,将会触发该函数。
当链中或者大循环中有更多的asynchronous函数时,可能需要传递相同数量的callback来查找每个操作的完成情况,最后一个callback函数执行其他的操作,比如返回响应等。
当你用更多的callback对它们进行编码时,pipe理/维护变得非常困难,并且缺乏如下所述的更好的可读性。
getData(function(a){ getMoreData(a, function(b){ getMoreData(b, function(c){ getMoreData(c, function(d){ getMoreData(d, function(e){ ... }); }); }); }); });
为了摆脱这些缺点,为了更好的可读性和维护,我们可以与其他模块,如
async
,bluebird
等,你可以select任何你喜欢看起来更好的方面了解和满足所有的要求而不做事情太复杂了。
无论如何,这完全取决于callback hell
或其他模块。
为了深入了解,
https://strongloop.com/strongblog/node-js-callback-hell-promises-generators/
阅读说明:
Async是一个实用程序模块,它为asynchronousJavaScript提供了直接,强大的function。
它不提供asynchronous函数,它提供了用于处理asynchronousJavaScript的函数。
注意:javascript 不是全部是asynchronous的,只是asynchronous部分是asynchronous的。
换一种方式
asynchronous不会使nodejsasynchronous,它通过其糖衣善良使asynchronous代码更简单