検索

ホームページ  >  に質問  >  本文

JavaScript/TypeScript でより簡潔な 2 フェーズ Promise を記述するにはどうすればよいですか?

私の使用例:

これより良いデザインパターンはあるでしょうか?

リーリー

いくつかのコメントを読んだ後、コードを大幅に簡略化しました:

ああああ

P粉401527045P粉401527045271日前395

全員に返信(1)返信します

  • P粉270842688

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

    値またはその Promise を明示的に返す関数を作成できます。とにかく簡単に await を実行できます。結果が同期しているかどうかを確認するには、resultinstanceofPromise

    を使用します。
    type Awaitable = T | Promise
    関数 mightyimmediate(
        呼び出し: () => 待機可能,
        tryImmediate: ブール値、
    ): 待機可能 {
        if (tryImmediate) {
            試す {
                return call(); // 実際には T なのか Promise なのかはわかりません
            } キャッチ (エラー) {
                // 必要なものを選択してください
                if (Math.random() > 0.5) {
                    エラーをスローします。
                } それ以外 {
                    Promise.reject(err) を返す
                }
            }
        } それ以外 {
            // それが約束であることを確認してください
            return Promise.resolve().then(() => call())
        }
    };
    
    キャッシュさせます: Record = {};
    function getCached(url: string): Awaitable {
        if (キャッシュ[url]) キャッシュ[url]を返します。
        新しい Promise を返します (r => {
            setTimeout(() => r('url の結果), 1000)
        }).then(v => { キャッシュ[url] = v; return v })
    }

    返事
    0
  • キャンセル返事