JavaScript/TypeScript でより簡潔な 2 フェーズ Promise を記述するにはどうすればよいですか?
P粉401527045
P粉401527045 2024-02-25 22:20:55
0
1
392

私の使用例:

  • リソースがすぐに利用できる場合は、返却してください
  • リソースがまだ利用できない場合はモーダルまたは読み込みインジケーターを表示し、準備ができるまで待ちます
  • モーダル ロジックはプロミス/リクエスト ロジックから分離する必要があります

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

リーリー

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

ああああ

P粉401527045
P粉401527045

全員に返信(1)
P粉270842688

値またはその 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
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート