Promise-js异步加载解决方案

范例:

var p = new Promise(function(resolve, reject){
    //做一些异步操作
    setTimeout(function(){
        console.log('执行完成');
        resolve('随便什么数据');
    }, 2000);
});

resolve(data);函数的作用,将Promise对象的状态从“未完成”变成“成功”。

reject(data);函数的作用是,在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去,实际就是将“未完成”状态变成“失败”。

范例:

    new Promise(function(resolve, reject) {
        setTimeout(function() {
            console.log("setTimeout", 2000);
            // resolve("执行完成");
            reject("执行出错");
        });
    }).then(function(data) {
        console.log(data);
    }, function(err) {
        console.log("错误", err);
    })

then(function(data){});当接收到“成功消息时执行内部function;

then(function(data){},function(err){});当接收到“成功”消息时执行第一个function,当接收到“失败”消息时执行第二个function。

catch(reject);当出现“错误”时会一直往后续then传递,直到被catch捕获。

注:每个then或catch都会生成新的promise实例,因此在每个then或catch中均需要发出resolve或reject消息,否则后续then或catch无法执行。

Promise.all()

var p = Promise.all([p1, p2, p3]);

all()接受数组作为参数。p1,p2,p3都是Promise的实例对象,p要变成Resolved状态需要p1,p2,p3状态都是Resolved,如果p1,p2,p3至少有一个状态是Rejected,p的状态就变成Rejected。

Promise.race()

var p = new Promise( [p1,p2,p3] )

只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。只获取最新发生状态变化的实例,后续丢弃。

Proise.resolve()、Promise.reject()将现有对象转化为Promise对象,并将状态直接置为resolve或reject。范例:

Promise.resolve('foo');//状态为resolve
Promise.reject('foo');//状态为reject
原文地址:https://www.cnblogs.com/swordyt/p/8342132.html