promise就是一种异步编程模式,处理编程中的异步任务
例子:
function fn(){
return new Promise((resolve,reject)=>{
成功时调用resolve(数据)
失败时调用reject(错误)
})
}
Promise说得通俗一点就是一种写代码的方式,并且是用来写JavaScript编程中的异步代码的。
调用.then.then.then的编写代码方式(链式)
两个回调函数参数resolve和reject:
在参数函数被执行的过程中,如果在其内部调用resolve,会将p的状态变成fulfilled,或者调用reject,会将p的状态变成rejected
重点:
1.一个 Promise 的当前状态必须为以下三种状态中的一种:等待态(Pending)、执行态(Fulfilled)和拒绝态(Rejected)。2.then方法可以被同一个promise调用多次
3.then方法必须返回一个promise对象
4. 还有一个就是当then传的值不是一个函数的时候,就将值传递给下一个then,也叫做值穿透
特点:
1、对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来。2、一旦状态改变,就不会再变。Promise对象的状态改变只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就会凝固,不会再变了(生命周期不可逆)。再对Promise对象添加回调函数也会立即得到这个结果。有了Promise对象,就可以将异步操作以同步操作的流程表达出来。
缺点:
1、无法取消Promise,一旦新建他就会立即执行,无法中途取消。2、如果不设置回调函数,Promise内部跑出的错误无法反应到外部。当pending的时候,无法知道进展到了哪一步。
方法:
Promise.all()
实现将多个的Promise实例包装成一个Promise实例,成功则返回一个数组,失败的话就返回最先失败的结果。例子:
Promise.all([
this.configGet,
this.addressGet
]).then(([config, address]) => {
return{
config:config,
address:address
}
}).catch((error)=>{
console.dir(error)
})
Promise.race(iterable)
返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。顾名思义,Promse.race就是赛跑的意思,意思就是说,Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
Promise.race([
this.configGet,
this.addressGet
]).then((result) => {
console.dir(result)
}).catch((error)=>{
console.dir(error)
})
应用场景:超时取消
Promise.each()
一个顺序执行 Promise 的方法,为数组中的每个值调用一个函数,然后返回PromisePromise.each([1, 2, 3],val => console.log(val));
//打印日志
// => 1
// => 2
// => 3
来源链接:zhuanlan.zhihu.com/p/81431697
each来源链接:www.npmjs.com/package/pro…