promise

269 阅读2分钟

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 的方法,为数组中的每个值调用一个函数,然后返回Promise
Promise.each([1, 2, 3],val => console.log(val));

//打印日志
// => 1
// => 2
// => 3

来源链接:zhuanlan.zhihu.com/p/81431697

each来源链接:www.npmjs.com/package/pro…