【发布时间】:2020-07-02 03:24:02
【问题描述】:
我正在尝试完全解决 this problem 但在 ES2020 中。
假设我有一个承诺会在一秒钟后解决,并且该承诺有几个awaits,从不同的地方同时调用。承诺只能解决一次,awaits 应该返回它的结果。在下面的代码中,我希望所有调用者都得到1。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
let counter = 0;
async function getSomething() {
await sleep(1000);
return ++counter;
}
(async function caller1() {
console.log(await getSomething());
})();
(async function caller2() {
console.log(await getSomething());
})();
(async function caller3() {
console.log(await getSomething());
})();
我该怎么做?
【问题讨论】:
-
问题是函数
getSomething每次被调用时都会返回一个新的promise,所以你的每个调用函数都在等待单独的函数。您可以执行类似const something = getSomething(); (async function caller1() { console.log(await something); })(); (async function caller2() { console.log(await something); })();和caller2之类的操作,最终会评估与caller1相同的Promise。
标签: javascript