Javascript: Promise 学习笔记(2)

作者: AlwaysBee | 来源:发表于2016-01-20 21:26 被阅读50次

    前篇结尾说到 Promise 的语法部分,包含了4个方法,分别是 all()race()reject()resolve(),下面每个方法都将以例子作为开始

    Promise.all()

    var val = 1;
    function step1(resolve, reject) {
        console.log('步骤一:执行');
        if (val >= 1) {
            resolve('Hello I am No.1');
        } else if (val === 0) {
            reject(val);
        }
    }
    
    function step2(resolve, reject) {
        console.log('步骤二:执行');
        if (val === 1) {
            resolve('Hello I am No.2');
        } else if (val === 0) {
            reject(val);
        }
    }
    
    function step3(resolve, reject) {
        console.log('步骤三:执行');
        if (val === 1) {
            resolve('Hello I am No.3');
        } else if (val === 0) {
            reject(val);
        }
    }
    
    var promise1 = new Promise(step1);
    var promise2 = new Promise(step2);
    var promise3 = new Promise(step3);
    
    var steps = [promise1, promise2, promise3];
    
    Promise.all(steps).then(values => {
        console.log(values);
    });
    
    /**
    输出结果 
    步骤一:执行
    步骤二:执行
    步骤三:执行
    ["Hello I am No.1", "Hello I am No.2", "Hello I am No.3"]
    **/
    
    steps = [promise1, "promise2", promise3];
    Promise.all(steps).then(values => {
      console.log(values);
    });
    
    /**
    输出结果 
    步骤一:执行
    步骤二:执行
    步骤三:执行
    ["Hello I am No.1", "promise2", "Hello I am No.3"]
    **/
    

    简单分析一下以上代码,首先定义了3个函数 step1step2step3,将这3个函数作为 Promise 的回调函数新建3个 Promise 对象,作为一个数组传给 all
    此时 all 会做什么呢?它将会依次处理这3个 Promise,如果最终这三个 Promise 都达到 fulfilled 状态,那么 all 返回的 Promise 也会达到 fulfilled 的状态。在处理每一个 Promise 的时候,会将传入 resolve 的参数保存在一个数组中,最终 all 调用 resolve 的时候,将以这个数组作为参数,这个数组就是 ["Hello I am No.1", "Hello I am No.2", "Hello I am No.3"] ,最后调用 then 的时候,values 的值即为这个数组
    这个例子后面我将 promise2 替换为 "promise2" 字符串,可以看到输出变为["Hello I am No.1", "promise2", "Hello I am No.3"],这是因为内部会判断这个值的类型,如果不是一个对象或者方法,则直接将这个值保存在数组中

    总结一下,all 方法接受一个可迭代的对象,比如 Array,在这个迭代参数内所有的 Promise 都被 resolved 之后,将返回一个被 resolvedPromise 对象,并将迭代参数内所有 Promise 调用resolve时所传的参数保存在一个数组内,作为最终 resolve 调用时的参数

    相关文章

      网友评论

        本文标题:Javascript: Promise 学习笔记(2)

        本文链接:https://www.haomeiwen.com/subject/nwslkttx.html