ES6 Promise

     js通常处理异步之后的操作都是嵌套,比如在ajax的success回调中处理和setTimeout中嵌套处理代码。但是如果嵌套过深不仅代码不美观,而且难维护,所以应运而生Promise。
    在张旭鑫的promise博客中写到Promise本意是"普罗米修斯",普罗米修斯是希腊神话故事中的英雄,名字的意思是"先知"。Promise最初的命名是Futures, "未来",可见Promise含义不是字面的"誓言"、"承诺"之类,而是"先知"、"未来"的意思。

 

    使用Promise是很简单的,首先创建一个Promise:

function PromiseFn(result){
    return new Promise(function(resolve, reject){
        if(result){
            resolve("resolved");
        }else{
            reject("rejected");
        }
    })
}

  

resolve 和 reject 可以改变 Promise 对象的状态。

Promise 对象有三种状态:

  • Fulfilled 可以理解为成功的状态

  • Rejected 可以理解为失败的状态

  • Pending 既不是 Fulfilld 也不是 Rejected 的状态,可以理解为 Promise 对象实例创建时候的初始状态

   

  调用PromiseFn方法能返回一个Promise对象,这个对象具有如下几个方法:

/**
*1.then
*2.catch
*3.all
**/

var
promise = PromiseFn(true); // promise返回成功 promise.then(function(res){ alert(res) return res; }).then(function(res)){ alert(res+"!"); } // promise返回成功的resolve方法可以链式写法,前一个then返回的值作为下一个then的参数 // promise返回失败 promise.then(null,function(res){alert(res)}); promise.catch(function(res){alert(res)}); // catch是then(null,function(){})的简写 // promise返回的reject方法链式写法只能执行一个 var promise2 = promiseFn(false); promise2.all([promise,promise2]).then(function(res){ console.log(res);// ["resolved", "rejected"] 方法会按照数组里面的顺序将结果返回。 })

 

posted @ 2016-09-06 17:57  过眼云烟之活在当下  阅读(185)  评论(0)    收藏  举报