何らかのイベント(-イベント)で呼び出される関数があるとしましょう。この関数は、いくつかのリストに多くの項目を読み込みます。
次のようにこの関数のロジックが設計されていることとします
function() {
oldSize = list.length;
// add new items (prepare them in advance)
for (i = 0; i < PAGE_SIZE; i++) list.push({});
$http.get("/next/page/" + oldSize).then(function() {
// here I want operate with oldSize value which is actual on moment of
// the $http.get invocation:
for (i = 0; i < PAGE_SIZE;i++) {
// do something with
list[oldSize + i] = ... ;
}
}
}
問題は全体の機能が.then(function() {
が不適切な値で動作していること、効果につながるものを、ほぼ同時に複数回呼び出すことができるということですoldSize
の変数 - それは最後のlist.length
の値になりますが、呼び出しの瞬間と同じように保存する必要があります。例えば
このイベントリスナがほぼ同時に2回呼び出された場合、それは次のようになります
oldSize == 5
、10(例えば)素子増加リスト。しかし、内部$http.get(...).then()
私は値oldSize == 5
で作業する必要があります。2回目の呼び出し:
oldSize == 15
(最初の呼び出しで10個の要素でリストが増加したため)。だからこの特に$http.get(...).then()
私は持っているoldSize == 15
。
私はそれがはっきりしていることを望みます。私の論理を変えるように私に言わないでください。私はちょうど非同期関数(私の場合は$http.get(...).then(...)
)の延期された結果の変数値を保存する方法を知りたいです。ありがとう。
なぜ外側の範囲に 'oldSize'を定義しますか? –
@YuryTarabanko getメソッドを呼び出す前に値を保存する必要がある場合、どこで定義しますか? – Andremoniy
この関数(およびネストされたコールバック)の外側で使用しない場合は、 'var oldSize = list.length'を実行するだけです。そうでなければ私の答えを以下でチェックしてください –