Skip to content

📚 3.allSettled

💻 代码实现

typescript
// 获取所有Promise对象的状态

Promise._allSettled = function (promises) {
    let count = 0,
        result = []
    return new Promise((resolve) => {
        promises.forEach((_promise, _idx) => {
            _promise
                .then(
                    (res) => {
                        result[_idx] = {
                            status: "fulfilled",
                            value: res,
                        }
                    },
                    (err) => {
                        result[_idx] = {
                            status: "rejected",
                            value: err,
                        }
                    }
                )
                .finally(() => {
                    count++
                    if (count >= promises.length) {
                        resolve(result)
                    }
                })
        })
    })
}

const pro = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject(3)
    }, 1000)
})

Promise.allSettled([pro, Promise.resolve(1), Promise.reject(2)]).then((data) => {
    console.log(data)
})

Promise._allSettled([pro, Promise.resolve(1), Promise.reject(2)]).then((data) => {
    console.log(data)
})

Released under the MIT License.