这是一个有决心并拒绝作为财产的反模式吗?为什么?

问题描述 投票:0回答:1
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将被调用很多次,但是数据只能被获取一次

javascript promise es6-promise
1个回答
0
投票

它本质上可能不是“反模式”,但是如果您绝对必须的话,我只会公开rejectresolve。这里不是这种情况。您可以只将promise或数据存储在变量中:

let promise;

async function someFunctionMustHaveFetchedData(){
    if (!promise) {
      promise = fetch('...');
    }
    let data = await promise;
    // do something after deferred resolved
}
© www.soinside.com 2019 - 2024. All rights reserved.