简体   繁体   English

将 Promise 解析并拒绝为财产是否是一种反模式?为什么?

[英]Is it an anti pattern that Promise with resolve and reject as property?why?

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
}



why am i doing this?我为什么要这样做?
someFunctionMustHaveFetchData will be called many times but data should only be fetch once someFunctionMustHaveFetchData 将被调用多次,但数据只能获取一次

It's probably not an "anti-pattern" per se, but I would only expose reject and resolve if you absolutely have to.它本身可能不是“反模式”,但我只会在绝对必要的情况下公开rejectresolve Which is not the case here.这不是这里的情况。 You can just store the promise or the data in a variable:您可以只将 promise 或数据存储在变量中:

let promise;

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM