promise迷你书-读书笔记
Promise三种类型
Constructor
使用Promise构造器来实例化一个promise对象
1 var promise = new Promise(function(resolve,reject){ 2 //异步处理 3 //处理结束,成功调用resolve,失败调用reject 4 })
Instance Method
promise实例对象处理成功或者失败的回调函数
promise.then(onFulfilled,onRejected) // resolve(成功)回调函数 onFulfilled // reject (失败)回调函数 onRejected promise.catch(onRejected) //reject(失败)时,对异常的处理 onRejected
Static Method
Promise作为全局对象还有静态方法
Promise.all()
Promise.resolve()
Promise.reject()
使用promise对象
function getUrl(url){ return new Promise((resolve,reject)=>{ $.ajax({ url:url, method:'get', success:function(res){ resolve(res) }, error:function(err){ reject(err) } }) }) } var url = 'http://httpbin.org/get' getUrl(url).then((res)=>{ //处理resolve(成功)的回调 console.log(res) }).catch((err)=>{ //处理reject(异常)的回调 console.log(err) })
Promise静态方法
Promise.resolve
-
-
new Promise的快捷方式
-
静态方法Promise.resolve(value) 可以认为是 new Promise() 方法的快捷方式
Promise.resolve(42).then(function(value){ console.log(value); });
Promise.resolve(value) 同样返回一个promise对象,并且会使这个对象从pending状态转为resolved状态
-
-
Thenable
-
Promise.resolve静态方法的另一个作用就是将thenable对象转为promise对象,到底什么样的对象能算是thenable的呢,最简单的例子就是 jQuery.ajax(),它的返回值就是thenable的.因为jQuery.ajax()
的返回值是 jqXHR Object 对象,这个对象具有 .then
方法
function getUrl(url){ return Promise.resolve($.ajax(url)) } var url = 'http://httpbin.org/get1' getUrl(url).then((res)=>{ console.log(res) }).catch((err)=>{ console.log(err) })
Promise.reject
和Promise.resolve()
一样是静态方法,是new Promise()
的快捷方式
Promise.reject(new Error("BOOM!")).catch(function(error){ console.error(error); });
每次调用then都会返回一个新创建的promise对象
then的错误使用方法
function badAsyncCall() { var promise = Promise.resolve(); promise.then(function() { // 任意处理 return newVar; }); return promise; }
首先在 promise.then
中产生的异常不会被外部捕获,此外,也不能得到 then
的返回值,即使其有返回值。
由于每次 promise.then
调用都会返回一个新创建的promise对象,应该采用promise chain的方式将调用进行链式化,修改后如下
function anAsyncCall() { var promise = Promise.resolve(); return promise.then(function() { // 任意处理 return newVar; }); }