跳转至

2723. 两个 Promise 对象相加

难度简单

题目描述

给定两个 promise 对象 promise1promise2,返回一个新的 promise。promise1promise2 都会被解析为一个数字。返回的 Promise 应该解析为这两个数字的和。

 

示例 1:

输入:
promise1 = new Promise(resolve => setTimeout(() => resolve(2), 20)), 
promise2 = new Promise(resolve => setTimeout(() => resolve(5), 60))
输出:7
解释:两个输入的 Promise 分别解析为值 2 和 5。返回的 Promise 应该解析为 2 + 5 = 7。返回的 Promise 解析的时间不作为判断条件。

示例 2:

输入:
promise1 = new Promise(resolve => setTimeout(() => resolve(10), 50)), 
promise2 = new Promise(resolve => setTimeout(() => resolve(-12), 30))
输出:-2
解释:两个输入的 Promise 分别解析为值 10 和 -12。返回的 Promise 应该解析为 10 + -12 = -2。

 

提示:

  • promise1 和 promise2 都是被解析为一个数字的 promise 对象

解法

方法一

思考

两个 Promise 都兑现后返回其数值之和。写成 \(Promise.all\) 再相加可以得到结果,同时会多一次数组包装。

依次 \(await\) 两个 Promise 后相加即可;后一个在前一个仍未完成时已在飞行,总等待仍是较慢者。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
async function addTwoPromises(
    promise1: Promise<number>,
    promise2: Promise<number>,
): Promise<number> {
    return (await promise1) + (await promise2);
}

/**
 * addTwoPromises(Promise.resolve(2), Promise.resolve(2))
 *   .then(console.log); // 4
 */
1
2
3
var addTwoPromises = async function (promise1, promise2) {
    return (await promise1) + (await promise2);
};

评论