大白话理解promise对象

Promise  表明了将来某个将要发生的事件(一般是一个异步操做) 

 


Promise 是异步编程的解决方案,可以简化多层回调嵌套,表明了将来某个将要发生的事件。
Promise是一个构造函数,自己有all、reject、resolve,原型上有then、catch。故Promise new出来的对象确定就有then、catch。ajax

promise接收的参数是一个匿名函数,匿名函数也有二个参数resolve/reject。
resolve表示异步操做执行成功后的回调函数,并将异步操做的结果,做为参数传递出去;
b. reject表示异步操做执行失败后的回调函数,并将异步操做的问题,做为参数传递出去;
promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。编程

* 创造promise实例后,会当即执行通常是包在一个函数中,在须要的时去运行这个函数,包装好的函数最后,会returnPromise对象 

 1)then方法进行链式调用,then 方法必须返回一个新的 promise 对象

then方法能够接受两个回调函数做为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。其中,第二个函数是可选的,不必定要提供。这两个函数都接受Promise对象传出的值做为参数。数组

2)catch方法在执行resolve的回调时,若是抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法中。promise

let p = new Promise((resolve, reject) => {
    console.log('====')
    //作一些异步操做
    setTimeout(function(){
        var num = Math.ceil(Math.random()*10); //生成1-10的随机数
        if(num < 5 ){
            resolve(num);
        }
        else{
            reject('数字大于等于5');
        }
    }, 1000);
});
p.then((data) => {
        console.log('resolved',data);
        console.log(somedata);
    },(err) => {
        console.log('rejected',err);
    }
).catch((err) => {
    console.log('catch',err);
});

// 当即输出=====

1s后根据num判断输出resolved 三、rejected 数字大于等于5dom

应用场景:异步

使用promise实现超时处理、封装处理ajax请求  异步编程

2) Promise.all。提供了并行执行异步操做的能力,而且在全部异步操做执行完后才执行回调.函数

能够将多个Promise实例包装成一个新的Promise实例spa

同时,成功和失败的返回值是不一样的,成功的时候返回的是一个结果数组(数据顺序和Promise.all接收到的数组顺序是一致的,即p1的结果在前,即使p1的结果获取的比p2要晚),而失败的时候则返回最早被reject失败状态的值。code

应用场景:

Promse.all在处理多个异步处理时很是有用,好比说一个页面上须要等两个或多个ajax的数据回来之后才正常显示,在此以前只显示loading图标。

一些游戏类的素材比较多的应用,打开网页时,预先加载须要用到的各类资源如图片、flash以及各类静态文件。全部的都加载完后,咱们再进行页面的初始化。

3) Promise.race([p1, p2, p3])里面哪一个结果得到的快,就返回那个结果,无论结果自己是成功状态仍是失败状态。

应用场景:

能够用race给某个异步请求设置超时时间,而且在超时后执行相应的操做

相关文章
相关标签/搜索