您的位置:首页 > Web前端 > JavaScript

Promise对象简介

2017-08-25 13:51 375 查看
一、概述

    promise是异步编程解决方案,避免了回掉深渊。

二、promise状态

    pending:进行中,初始状态;

    fulfiled:成功,操作已成功;

    rejected:失败,操作已失败。

    promise状态变化:pending到fulfiled与pending到rejected,一旦promise状态改变,其状态将会凝固不变。

三、基本用法

    var promise = new Promise(

        /*executor*/

        function(resolve,reject){

            if(/* */){resolve(value);}//fulfiled状态

            else{reject(error);}//rejected状态

        }

    )

    Promise构造函数接收一个executor函数作为参数,executor函数在Promise构造函数执行时同步执行,被传递到resolve和reject函数,分别在promise到状态由pending到fulfiled与pending到rejected时被执行。

    promise实例声称以后,可以使用then方法分别指定resolved与rejected状态到回掉函数,其中第二个回掉函数是可选的。

    promise.then(

        function(value){

            //resolved

        },

        function(error){

            //rejected

        })  

四、promise属性

    Promise.length:值总为1,构造器函数的参数个数;

    Promise.protorype:原型对象。

        Promise.prototype.then:为Promise实例添加状态改变的回掉函数,then方法的第一个参数是resolved状态的回掉函数,第二个参数(可选)是rejected状态的回掉函数。

        Promise.prototype.catch:是.then(null,reject)的别名,用于指定错误发生时的回掉函数,其返回的仍然是一个promise对象。一般来说,不要在then方法中定义rejected回掉函数,总是使用catch方法。

五、promise方法

    Promise.all

        用于将多Promise实例包装成一个promise对象,其接收一个promise实例数组,只用当数组中的Promise实例都resolve时,其状态才会变成resolved,只要有一Promise实例变成rejected,其状态将变成rejected。

        var p = Promise.all([promise1,promise2,...])

    Promise.race

        用于将多Promise实例包装成一个promise对象,其接收一个promise实例数组,只用当数组中的Promise实例状态改变,其状态就跟着改变。

    Promise.resolve

        将现有对象转变成Promise对象

    Promise.reject

        返回一个新的Promise对象,其状态为rejected。

六、应用

    Promise实现ajax的例子

    var getJSON = function(url) {

      var promise = new Promise(function(resolve, reject){
var client = new XMLHttpRequest();
client.open("GET", url);
client.onreadystatechange = handler;
client.responseType = "json";
client.setRequestHeader("Accept", "application/json");
client.send();
function handler() {
if (this.readyState !== 4) {
return;
}
if (this.status === 200) {
resolve(this.response);
} else {
reject(new Error(this.statusText));
}
};
});

return promise;
};

getJSON("/posts.json").then(function(json) {
console.log('Contents: ' + json);
}, function(error) {
console.error('出错了', error);
});
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  前端 javascript promis