JS中的promise对象

来源:互联网 发布:阿里云账号注销解绑 编辑:程序博客网 时间:2024/06/05 18:02

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);})