js promise

什么是promise

promise是抽象异步处理对象以及对其进行各种操作的组件

基于回调函数的异步处理(统一参数使用规则)

 
1
2
3
4
5
6
getAsync('file.txt',function(error,result){
if(error){
throw error;
}
});

基于promise的异步处理(统一接口)

1
2
3
4
5
var promise =getAsyncPromise("file.txt");
promise.then(function(result){
}).catch(error){
}

除promise对象规定的方法(then,catch…)以外的方法都是不可以使用的

promise三个状态:pending、fulfilled、rejected

用new Promise 方法创建promise对象

1
2
3
4
5
var promise = new Promise(function(resolve, reject) {
// 异步处理
// 处理结束后、调用resolve 或 reject
});

用.then 或 .catch 添加promise对象的处理函数 (.catch 只是 promise.then(undefined, onRejected) 的别名而已)

1
2
promise.then(onFulfilled, onRejected)

resolve(成功)时
onFulfilled 会被调用
reject(失败)时
onRejected 会被调用
onFulfilled 、onRejected 两个都为可选参数。

Promise四个静态方法:resolve、reject、all、race

  • Promise.reject(error) 是和 Promise.resolve(value) 类似的静态方法,是 new Promise() 方法的快捷方式。

    1
    2
    3
    4
    var promise = Promise.resolve($.ajax('/json/comment.json'));// => promise对象
    promise.then(function(value){
    console.log(value);
    });
    1
    2
    3
    new Promise(function(resolve,reject){
    reject(new Error("出错了"));
    });
  • Promise.all接收一个promise对象数组作为参数,当这个数组里的所有promise对象全部变为resolve或reject状态的时候,它才会去调用 .then 方法

  • Promise.race接收一个promise对象数组为参数, 只要有一个promise对象进入FulFilled 或者 Rejected 状态的话,就会调用 .then 方法