请求控制 Promise 返回结果, 你会吗

272 阅读1分钟

有两个请求 promiseApromiseBpromiseA的请求结果相对promiseB的结果要准确一些,但 promiseApromiseB请求抖动厉害,promiseB2s内肯定会返回结果,promiseA请求时长不定,但要求在2s内如果promiseA有结果优先用promiseA的结果、如果在2spromiseA没有返回请求结果,就用promiseB的结果

题目如下、请实现schedule
async function schedule(promiseA, promiseB) {...}

const promise1 = () => new Promise((resolve) => {
    setTimeout(() => resolve(5), 1500)
})

const promise2 = () => new Promise((resolve) => {
    setTimeout(() => resolve(6), 1000)
})

const promise3 = () => new Promise((resolve) => {
    setTimeout(() => resolve(7), 2500)
})

const promise4 = () => new Promise((resolve) => {
    setTimeout(() => resolve(8), 1200)
})

schedule(promise1, promise2).then(console.log)  //打印 5

schedule(promise2, promise1).then(console.log)  //打印 6

schedule(promise3, promise4).then(console.log)  //打印 8

看下面之前、请先思考🤔一下下
async function schedule(promiseA, promiseB) {
    const task = [];
    let result;
    promiseA().then((rA) => {
        const r = task.pop();
        r && r(rA);
    });
    promiseB().then((rB) => {
        result = rB;
    });
    setTimeout(() => {
        const r = task.pop();
        r && r(result);
    }, 2000)
    return await new Promise((resolve) => task.push(resolve));
}

请在下面评论留下你的思考!!!