私の使用例:
これより良いデザインパターンはあるでしょうか?
リーリーいくつかのコメントを読んだ後、コードを大幅に簡略化しました:
ああああ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 }) }