不使用Promise
对象的来编写异步JavaScript的情况非常类似于闭着眼睛烘烤蛋糕。虽然能做到,但它会变得混乱,你可能会把自己玩坏。
我可没说 必须 用Promise
,但你理解我的意思。它真的很棒。但有时候,它需要一些帮助来解决一些独特的挑战,例如当你试图按顺序,解决一串promises时。这样的例子很常见,例如,当您需要对一批AJAX返回的数据排序时,您希望服务器处理这些事情,但不能同时处理,而是按照时间顺序一件件处理。
如果不使用有助于简化此任务的软件包(如Caolan McMahon的异步库),那么解决顺序promise问题的最普遍的方案是使用Array.prototype.reduce()
。你可能听说过它。它接收一组参数,对参数中的每个元素应用函数,最终将其简化为单个值并返回,如下所示:
|
|
不过,对于上面提过的顺序promise问题使用reduce()
,代码看起来是这样的:
或者,以更新的格式:
这很整洁!但是在最长的时间里,我只是囫囵使用这个解决方案并将代码复制到我的应用程序中,并没有去深入理解。
所以,在这篇文章中,我来通过探索两件事情来深入理解:
- 为什么可行?
- 为什么我们不能用其他
Array
方法做同样的事情呢?