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"] 方法会按照数组里面的顺序将结果返回。 })

浙公网安备 33010602011771号