Javascript: Promise 学习笔记(2)

前篇结尾说到 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 调用时的参数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Promiese 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,语法上说,Pr...
    雨飞飞雨阅读 8,627评论 0 19
  • Promise的含义:   Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和...
    呼呼哥阅读 6,502评论 0 16
  • promise是什么 promise对象可以理解为一次执行的一步操作,使用promise对象之后可以用一种链式调用...
    谢小逸阅读 2,118评论 2 0
  • 00、前言Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区...
    夜幕小草阅读 6,367评论 0 12
  • 第一次买了一个豆浆机,打出了人生的第一杯豆浆,满意感足足的
    苏sunshineabc阅读 656评论 0 0