Promiseを使ってポーリングされた条件が満たされるまで待つ
2023-12-03 03:02:14
質問
特定の条件が真になるまで解決しないJavaScriptのプロミスを作成する必要があります。 私がサードパーティのライブラリを持っているとしましょう、そして私はそのライブラリ内で特定のデータ条件が存在するまで待つ必要があります。
私が興味を持っているシナリオは、この条件が満たされたとき、単にポーリングする以外に知る方法がないものです。
私はそれを待つ約束を作ることができ、このコードは動作しますが、この問題に対してより良い、またはより簡潔なアプローチはありますか?
function ensureFooIsSet() {
return new Promise(function (resolve, reject) {
waitForFoo(resolve);
});
}
function waitForFoo(resolve) {
if (!lib.foo) {
setTimeout(waitForFoo.bind(this, resolve), 30);
} else {
resolve();
}
}
使用方法
ensureFooIsSet().then(function(){
...
});
私は通常、最大ポーリング時間を実装しますが、この問題を曇らせたくなかったのです。
どのように解決するのですか?
小さなバリエーションとして、名前付き IIFE を使用すると、コードがもう少し簡潔になり、外部スコープを汚染するのを避けることができます。
function ensureFooIsSet() {
return new Promise(function (resolve, reject) {
(function waitForFoo(){
if (lib.foo) return resolve();
setTimeout(waitForFoo, 30);
})();
});
}
関連
-
[解決済み] JavaScript の Promise が解決するのを待ってから機能を再開するにはどうすればよいですか?
-
[解決済み] jQuery の Ajax リクエストがすべて終了するまで待ちますか?
-
[解決済み】一部の約束が拒否されても、すべての約束が完了するまで待つ
-
[解決済み] JSのDateからDay名
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 上級者向けJavaScript。この関数はなぜ括弧でくくられるのですか?重複
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] JSXとLoadshを使用して、ある要素をn回繰り返す方法
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] ECMAScriptとは?
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] 変異を伴わないオブジェクトからの値の削除