[解決済み] 変数が定義されていない間 - 待つ
2023-04-09 06:24:14
質問
私は
click
イベントがありますが、これは別の場所から初めて自動的にトリガーされます。問題は、必要な変数がまだFlashとWebサービスによって定義されているため、実行が早すぎることです。だから今、私は持っています。
(function ($) {
$(window).load(function(){
setTimeout(function(){
$('a.play').trigger("click");
}, 5000);
});
})(jQuery);
問題は、遅いインターネット接続の人にとっての5秒は速すぎる可能性があり、逆に速いインターネット接続の人にとっては遅すぎるということです。
というわけで、以下のような遅延やタイムアウトをどのように行うべきでしょうか?
someVariable
が定義されるまでの遅延やタイムアウトはどうすればいいのでしょうか?
どのように解決するのですか?
async, await
の実装、改善
トプラックの回答
(async() => {
console.log("waiting for variable");
while(!window.hasOwnProperty("myVar")) // define the condition as you like
await new Promise(resolve => setTimeout(resolve, 1000));
console.log("variable is defined");
})();
console.log("above code doesn't block main function stack");
OPの質問を再検討した結果。意図されたものを実装するためのより良い方法が実はあります: "
変数セットコールバック
というものです。以下のコードは、必要な変数がオブジェクト (またはウィンドウ) によってカプセル化されている場合にのみ動作しますが
let
または
var
(最初の答えは、私が実際に元の質問を読まずに既存の答えの改良をやっていただけなので残しました)。
let obj = encapsulatedObject || window;
Object.defineProperty(obj, "myVar", {
configurable: true,
set(v){
Object.defineProperty(obj, "myVar", {
configurable: true, enumerable: true, writable: true, value: v });
console.log("window.myVar is defined");
}
});
見る Object.definePropertyを参照してください。 または es6 プロキシ を使うか (これはおそらく過剰な要求です)
もっと探しているのであれば
/**
* combining the two as suggested by @Emmanuel Mahuni,
* and showing an alternative to handle defineProperty setter and getter
*/
let obj = {} || window;
(async() => {
let _foo = await new Promise(res => {
Object.defineProperty(obj, "foo", { set: res });
});
console.log("obj.foo is defined with value:", _foo);
})();
/*
IMPORTANT: note that obj.foo is still undefined
the reason is out of scope of this question/answer
take a research of Object.defineProperty to see more
*/
// TEST CODE
console.log("test start");
setTimeout(async () => {
console.log("about to assign obj.foo");
obj.foo = "Hello World!";
// try uncomment the following line and compare the output
// await new Promise(res => setTimeout(res));
console.log("finished assigning obj.foo");
console.log("value of obj.foo:", obj.foo); // undefined
// console: obj.foo is defined with value: Hello World!
}, 2000);
関連
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] JavaScriptで変数が存在するか(定義されているか/初期化されているか)をチェックする
-
[解決済み] Bashで変数が設定されているかどうかを確認する方法は?
-
[解決済み] JavaScriptで変数が配列であるかどうかを確認する方法は?
-
[解決済み] "お知らせ 未定義変数"、"Notice: Notice: 未定義のインデックス", "Notice:未定義のインデックス", "Notice."。PHPを使用した「未定義のオフセット
-
[解決済み] 変数が存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] チェックボックスのチェック/アンチェックは、jqueryを使用していますか?重複
-
[解決済み】JavaScriptで定義されていない変数を確認する方法
-
[解決済み] Jqueryのコードはヘッダーとフッターのどちらに入れるべきですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] セレクトした要素の外側のHTMLを取得する
-
[解決済み] Select <a> which href ends with some string
-
[解決済み] チェックボックスのチェック/アンチェックは、jqueryを使用していますか?重複
-
[解決済み] jQuery UI DatePicker - 日付フォーマットの変更
-
[解決済み] 動的に生成された要素でクリックイベントが動作しない [duplicate]
-
[解決済み] CSSを使用してSVG画像の色を変更する方法(jQuery SVG image replacement)とは?
-
[解決済み] jQueryを使ってロールオーバー時に画像ソースを変更する
-
[解決済み] jQuery: outer html() [重複]。
-
[解決済み] jQuery .onとhoverの使い分けは可能ですか?
-
[解決済み】jQueryで入力不可属性をトグルする。