export function getDeferred () {
let resolve; let reject;
const promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
promise.resolve = resolve;
promise.reject = reject;
return promise ;
};
let deferred=getDeferred();
async function fetchSomeData(){
let data=await fetch('...')
deferred.resolve(data);
}
async function someFunctionMustHaveFetchedData(){
let data = await deferred;
// do something after deferred resolved
}
我为什么要这样做?someFunctionMustHaveFetchData将被调用很多次,但是数据只能被获取一次
它本质上可能不是“反模式”,但是如果您绝对必须的话,我只会公开reject
和resolve
。这里不是这种情况。您可以只将promise或数据存储在变量中:
let promise;
async function someFunctionMustHaveFetchedData(){
if (!promise) {
promise = fetch('...');
}
let data = await promise;
// do something after deferred resolved
}