javascriptでループ内でコールバックを使用する場合、ループ内で更新された変数をコールバックで使用するために保存する方法はありますか?[重複しています]。
2023-09-07 19:05:44
質問
例えば以下のようなものがあるとします。
for(var i = 0; i < length; i++){
var variable = variables[i];
otherVariable.doSomething(variable, function(err){ //callback for when doSomething ends
do something else with variable;
}
コールバックが呼ばれるまでに
variable
は必然的にすべてのコールバックの最後の変数になり、私が望むように、各コールバックで異なる変数になることはありません。私は
variable
を
doSomething()
に変換し、それをコールバックの一部として渡すのですが
doSomething()
は外部ライブラリの一部であり、そのソースコードをいじくり回すことはしたくありません。
私よりもJavaScriptに詳しい方は、私がやりたいことを行うための代替方法があるかどうかご存知でしょうか?
最高、そしてありがとうございます。
Sami
どのように解決するのですか?
この状況に対処するための、醜いとはいえ一般的な方法は、すぐに呼び出される別の関数を使用して、変数を保持するためのスコープを作成することです。
for(var i = 0; i < length; i++) {
var variable = variables[i];
otherVariable.doSomething(function(v) { return function(err) { /* something with v */ }; }(variable));
}
すぐに呼び出される関数内で、作成され、返されるコールバックが、関数へのパラメータを参照していることに注意してください。
v
を参照しており、外側の
variable
. これをもっと読みやすくするために、コールバックのコンストラクタを名前付き関数として抽出することをお勧めします。
function callbackFor(v) {
return function(err) { /* something with v */ };
}
for(var i = 0; i < length; i++) {
var variable = variables[i];
otherVariable.doSomething(callbackFor(variable));
}
関連
-
[解決済み] AngularJS 。非同期データでサービスを初期化する
-
[解決済み】スクリプトの読み込みと実行順序について
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] 上級者向けJavaScript。この関数はなぜ括弧でくくられるのですか?重複
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] ECMAScriptとは?
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる
-
[解決済み] 変異を伴わないオブジェクトからの値の削除
-
[解決済み] リダイレクトされずにHTMLフォームを送信する方法
-
[解決済み] Javascriptの.filter()メソッドでコールバック関数に追加パラメータを渡すにはどうすればよいですか?
最新
-
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クロージャ - シンプルな実用例
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] ECMAScriptとは?
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる