• 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.

    博客地址:http://www.cnblogs.com/jasonxuli/
  • 相关阅读:
    Linux 安装apache2时候遇到的问题
    ubuntu安装php时出现error: xml2config not found. Please check your libxml2 installation 的解决办法
    Linux一块网卡绑定2个IP地址
    php 满足条件后跳转的几种方法.
    Linux 安装php 遇到 libtool: link: `ext/date/php_date.lo' is not a valid libtool object
    js 光标移动到输入框最后位置函数
    Linux iptables 防火墙相关命令介绍及使用
    tcpdump的简单选项介绍
    子网掩码转换函数
    Linux 十六进制转换十进制的函数
  • 原文地址:https://www.cnblogs.com/jasonxuli/p/4398742.html
Copyright © 2020-2023  润新知