Promise之Promise.race()

119 阅读1分钟

Promise之Promise.race()

描述

参考MDN

developer.mozilla.org/zh-CN/docs/… 语法

Promise.race(iterable);
  1. 参数

    返回值

    一个待定的 Promise 只要给定的迭代中的一个 promise 解决或拒绝,就采用第一个 promise 的值作为它的值,从而异步地解析或拒绝(一旦堆栈为空)。

    描述

    race 函数返回一个 Promise,它将与第一个传递的 promise 相同的完成方式被完成。它可以是完成(resolves),也可以是失败(rejects),这要取决于第一个完成的方式是两个中的哪个。

    如果传的迭代是空的,则返回的 promise 将永远等待。

    如果迭代包含一个或多个非承诺值和/或已解决/拒绝的承诺,则 Promise.race 将解析为迭代中找到的第一个值。

/**
 * 1.Promise.race(iterable) 方法返回一个Promise,
 * 一旦某一个Promise 解决或者拒绝,返回的promise就会解决或者拒绝
 ***/

function PromiseRace(array) {
    if (!Array.isArray(array)) return new TypeError("不是数组");
    return new Promise((resolve, reject) => {
        for (let i = 0; i < array.length; i++) {
             if (array[i] instanceof Promise) {
                 array[i].then(resolve, reject);
             } else {
                 resolve(array[i])
             }
        }
    })
}


const promise1 = new Promise((resolve, reject) => {
    setTimeout(resolve, 500, 'one')
});

const promise2 = new Promise((resolve, reject) => {
    setTimeout(resolve, 100, 'two');
});


let arr = [promise1,promise2]
PromiseRace(arr).then(res=>{
    console.log(res)
}).catch(e=>{
    console.log(e)
})

  1. /**
     * 1.Promise.race(iterable) 方法返回一个Promise,
     * 一旦某一个Promise 解决或者拒绝,返回的promise就会解决或者拒绝
     ***/
    
    function PromiseRace(array) {
        if (!Array.isArray(array)) return new TypeError("不是数组");
        return new Promise((resolve, reject) => {
            for (let i = 0; i < array.length; i++) {
                 if (array[i] instanceof Promise) {
                     array[i].then(resolve, reject);
                 } else {
                     resolve(array[i])
                 }
            }
        })
    }
    
    
    const promise1 = new Promise((resolve, reject) => {
        setTimeout(resolve, 500, 'one')
    });
    
    const promise2 = new Promise((resolve, reject) => {
        setTimeout(resolve, 100, 'two');
    });
    
    
    let arr = [promise1,promise2]
    PromiseRace(arr).then(res=>{
        console.log(res)
    }).catch(e=>{
        console.log(e)
    })