JS中的promise对象

promise对象中文意思可以直接理解为“承诺”

promise是一个用来传递未来即将发生的事件(通常为异步操作)的状态的一个对象,这个对象有很多的API,可以用来进一步处理异步操作响应之后的事情(处理数据)

promise的三个状态:
pending,Resolved,Rejected,分别代表进行中,已完成,已失败

promise特征及优缺点:
promise一旦执行,中途不会被中断,状态一旦发生变化就不会再次发生变化(“承诺”),其他的手段无法对其状态进行更改,它可以用同步的流程表达异步的操作,避免的异步回调层层嵌套的缺点,但是如果不为promise设置回调的话,promise内部会抛出错误,并且不会反应到外部,而且在pending状态是,无法得知进行到那个状态

promise接收一个回调函数,函数的参数为resolve和reject,他们是两个函数,resolve是promise对象从pending变为Resolved时调用,将异步操作的结果作为参数返回,同理,reject是异步操作失败的时候来调用

promise通过.then的形式来支持链式语法

            var promise1 = function() {
                return new Promise(function(resolve, reject) {
                    resolve("promise1执行成功")
                });
            };

            var promise2 = function() {
                return new Promise(function(resolve, reject) {
                    resolve("promise2执行成功")
                });
            };

            promise1().then(function(data) {
                console.log(data);
                return promise2();
            }).then(function (data) {
                console.log(data);
            });
            promise1执行成功
            promise2执行成功

all

            Promise.all([promise1(),promise2()]).then(function (data) {
                console.log(data);
            })
            ["promise1执行成功", "promise2执行成功"]

promise中all,接收一个数组参数,数组中为n个promise,他们的返回值在.then中也是一个数组作为回调的参数

定义一个函数,入参为接口API站点和接口入参,函数返回值为一个promise对象

const postData = function(urls, params) {
    return new Promise(function(resolve, reject) {
        $.ajax({
            url: urls,
            type: 'post',
            data: params,
            dataType: 'json',
            cache: false
        }).then(function(data) {
            resolve(data);
        }, function(e) {
            reject(e);
        });
    })
};

postData(ymAccountUrl + "/getShopAnnouncementList",{
    ymOpenid: 'ozP1gs9Ql5W4HbbTrBDHNo0XcizU'
}).then(function (res) {
    console.log(res);       //处理数据
}).catch(function (res) {   //抛出异常做出处理
    console.log(res);
})

你可能感兴趣的:(原生js,异步,对象,es6)