reduce + Promise 顺序执行代码

本文地址: http://www.cnblogs.com/jasonxuli/p/4398742.html

 

下午的太阳晒得昏昏沉沉,和上周五一样迷糊,看一段代码半天没看明白,刚才不知不觉眯了几分钟,醒来后再看就醒悟了。

这段代码先加载story.json文件,然后依次加载story.chapterUrls数组中的url。看半天一直没搞明白为啥是顺序的,原因是每个reduce执行的function本身就构造了first - next的顺序结构,而Promise的then又保证了代码的顺序执行,即reduce把多个then串起来生成了一长串then。

getJson('story.json').then(function(story) {
      addHtmlToPage(story.heading);

      return story.chapterUrls.reduce(function(chain, chapterUrl) {
        console.log('reduce ', chain, chapterUrl);
        // Once the last chapter's promise is done…
        return chain.then(function() {
          // …fetch the next chapter
          return getJson(chapterUrl);
        }).then(function(chapter) {
          // and add it to the page
          addHtmlToPage(chapter.html);
        });
      }, Promise.resolve());
    }).then(function() {
      // And we're all done!
      addTextToPage("All done");
    }).catch(function(err) {
      // Catch any error that happened along the way
      addTextToPage("Argh, broken: " + err.message);
    }).then(function() {
      // Always hide the spinner
      document.querySelector('.spinner').style.display = 'none';
    });

 

上周五看bluebird的代码,想找出Promise.promisify()是怎么做到把异步回调式的函数变成Promise式的函数。看了半天,发现它把目标函数的最后一位参数当做callback,并且把这个callback函数的第一位参数当做err。原来是有前置条件的,那么好像没我想的那么强大嘛。迷糊的时候又去看了下bluebird的md文档,原来人家早就说了:

The node function should conform to node.js convention of accepting a callback as last argument and calling that callback with error as the first argument and success value on the second argument.

 

转载于:https://www.cnblogs.com/jasonxuli/p/4398742.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值