能够用到很多异步处理的回调函数之中,而且支持链式调用,主要是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
对象最后状态如何都会执行的操作,可用于清除变量或者做一些善后的操作
网友评论