能够用到很多异步处理的回调函数之中,而且支持链式调用,主要是pending/resolved/rejected这三个状态。
创建Promise对象
let myObj = new Promise(fucntion(resolve,reject){})
里面可以改变promise的状态
通过resolve(data)表示进程成功
通过reject(error)表示进程失败
回调函数
then方法支持两个回调函数,第一个是接受来自resolved里的数据,第二个是接受rejected里的数据,做回调函数处理
``
let myFunc = function(){
let helo = new Promise(function(resolve,reject){
if()
resolve(data);
if()
reject(error);
})
return helo //千万记得return出去,不然外面没监听到
}
myFunc().then(function(data){..},funcion(error){})
//支持链式调用,可以在then再次调用then,第二个then会接受第一个then里面的函数值作为参数逐步往下
//可以将其看作一个二叉树 一边是resolved,一边是rejected
错误捕捉
catch()是then(null,function(){})的别名,用于指定发生错误时的回调函数
可以在Promise对象中 throw new Error('wrong code'),然后在catch()中可以wrong code被捕捉到
包装多个Promise
Promise.all(promise1,promise2,promise3) 必须等到多个Promise对象的状态均改变后,Promise.all才会改变状态
Promise.race(p1,p2,p3) 当一个Promise对象改变后,Promise.race()的状态就会改变
改造为Promise对象
let hello = promise.resolve();
...
p.then(()=>{
...your code
})
同理 可以使用 p.catch()
常用链式调用
--
.done() done方法处于回调链的尾端,保证抛出任何可能出现的错误
.finally()用于指定不管Promise对象最后状态如何都会执行的操作,可用于清除变量或者做一些善后的操作













网友评论