Это анти-образец, который обещают с решимостью и отвергают как собственность? Почему? - PullRequest
0 голосов
/ 27 апреля 2020
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 будет вызываться много раз, но данные должны выбираться только один раз

1 Ответ

1 голос
/ 27 апреля 2020

Это, вероятно, не "анти-шаблон" как таковой, но я бы раскрыл reject и resolve, если бы вам это было абсолютно необходимо. Что не так здесь. Вы можете просто сохранить обещание или данные в переменной:

let promise;

async function someFunctionMustHaveFetchedData(){
    if (!promise) {
      promise = fetch('...');
    }
    let data = await promise;
    // do something after deferred resolved
}
...