JavaScript/TypeScript에서 보다 간결한 2단계 약속을 작성하는 방법은 무엇입니까?
P粉401527045
P粉401527045 2024-02-25 22:20:55
0
1
391

내 사용 사례:

  • 리소스를 즉시 사용할 수 있으면 반환하세요
  • 리소스를 아직 사용할 수 없는 경우 모달 또는 로딩 표시기를 표시한 다음 준비될 때까지 기다리세요
  • 모달 로직은 약속/요청 로직과 분리되어야 합니다

더 좋은 디자인 패턴이 있나요?

으아악

몇 가지 댓글을 읽은 후 코드를 대폭 단순화했습니다.

let twoStagePromise = (state: boolean): Promise<{ ready: boolean, wait: Promise<any>; }> => {
    return new Promise((resolve, reject) => {
        try {
            if (state) {
                resolve({
                    ready: true,
                    wait: new Promise((resolve, reject) => {
                        resolve([1, 2, 3]);
                    })
                });
            } else {
                resolve({
                    ready: false,
                    wait: new Promise((resolve, reject) => {
                        setTimeout(() => { resolve([1, 2, 3]); }, 1000);
                    })
                });
            }
        } catch (e) {
            reject(e);
        }
    });
};

twoStagePromise(false).then((data) => {
    if (!data.ready) {
        console.log('loading...');
    }
    return data.wait;
}).then((result) => {
    console.log("recieved result", result);
}).catch((error) => {
    console.log("try-catch failed or inner promise failed")
});

P粉401527045
P粉401527045

모든 응답(1)
P粉270842688

값이나 약속을 명시적으로 반환하는 함수를 만들 수 있습니다. 어쨌든 쉽게 할 수 있어요 await 了。要检查结果是否同步,请使用 result instanceof Promise

으아아아
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿