前端开发那些事儿程序员JavaScript

Promise相关知识

2020-08-26  本文已影响0人  时光已翩然轻擦

一、Promise基础

1.为什么需要Promise?

2.Promise构造函数

3.Promise的状态

4.then方法

5.捕获拒绝状态

二、Promise的方法

1.Promise.resolve(value):

返回一个Promise实例,并将它的状态设置为已完成,同时将它的结果作为传入onFulfilled函数的值。

2.Promise.reject(reason):

返回一个Promise实例,并将它的状态设置为已拒绝,同时将它的结果作为传入onRejected函数的原因。

3.Promise.race([promise1,promise2,...]):

返回一个Promise实例,接受一个含多个Promise实例的数组,当其中一个Promise实例状态改变时,就进入该状态不可改变。这里所有的Promise实例为竞争关系,只选择第一个进入改变状态的promise的值。

4.Promise.all([promise1,promise2,...]):

返回一个Promise实例,接受一个含多个Promise实例的数组,当所有Promise实例都成为已完成状态时,进入已完成状态,否则进入已拒绝状态。

5.Promise.allSettled():

返回一个Promise实例,在所有给定的Promise都已经fulfilled或rejected后返回对应状态,并带有一个对象数组,每个对象表示对应的Promise结果。

6.Promise.any():尚未被所有的浏览器完全支持

接收一个Promise可迭代对象,只要其中的一个 Promise 成功,就返回那个已经成功的 Promise 。如果可迭代对象中没有一个 promise 成功(即所有的 promises都失败/拒绝),就返回一个失败的 promise 和AggregateError类型的实例,它是 Error 的一个子类,用于把单一的错误集合在一起。本质上,这个方法和Promise.all()是相反的。

三、实现Promise.all()

Promise.myAll = (list => {
    return new Promise((resolve, reject) => {
        let count = 0
        const values = []
        list.forEach((item, i) => {
            Promise.resolve(item).then(res => {
                values[i] = res
                count++
                if (count === list.length) {
                    resolve(values)
                }
            }, err => {
                reject(err)
            })
        });
    })
})
上一篇 下一篇

猜你喜欢

热点阅读