>  Q&A  >  본문

JavaScript/TypeScript에서 보다 간결한 2단계 약속을 작성하는 방법은 무엇입니까?

내 사용 사례:

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

으아악

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

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粉401527045P粉401527045236일 전364

모든 응답(1)나는 대답할 것이다

  • P粉270842688

    P粉2708426882024-02-26 18:30:07

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

    으아아아

    회신하다
    0
  • 취소회신하다