你基本上想要一个懒散的开始,持久的承诺结果。
这样的东西应该足够了。。。
let dataGlobal;
const getData = () => (dataGlobal ??= GetCoverage("all"));
第一次
getData
被调用时,它将分配由返回的承诺
GetCoverage()
到
dataGlobal
并将其退回。
任何后续调用都将返回已分配的promise。
这里有一个使用假的快速演示
GetCoverage
// mock
const GetCoverage = () => {
console.log("GetCoverage called");
return new Promise((r) => {
setTimeout(r, 1000, Math.random());
});
}
let dataGlobal;
const getData = () => (dataGlobal ??= GetCoverage("all"));
// Make parallel calls
getData().then(console.log.bind(null, "Result #1:"));
getData().then(console.log.bind(null, "Result #2:"));
getData().then(console.log.bind(null, "Result #3:"));
另请参阅
Nullish coalescing assignment (??=)