私は次の構造のウェブページを書いています:
正確性を保証するために、テーブルは、他のテーブルが完全に更新された後(つまり、計算によって行われた後)にのみ更新する必要があります。ただし、これを効果的に実現する方法がわからず、JavaScript内にwait
機能が見つかりませんでした。
今のところ、私は次の方法を使用しています。
updated
を宣言し、それをfalse
にします。while
がupdated
になるまで、空のtrue
ループを作成します。updated
をtrue
に設定します。これは私には直感的ではないように思えますが、他の方法は考えられません。これを行うための良い方法はありますか?
ご入力いただきありがとうございます。
リスナーを追加します。計算が完了してイベントが受信されたら、更新をtrueに設定します。
updated
をtrueに設定してから、updated
がtrueになるのを待つ代わりに、リスナーでやりたいことを何でもします。
myEventBus.addListener(function () {
// do whatever
updateTable();
alert('table updated!');
});
空のwhileループを実行することは悪い考えです。 CPUサイクルを消費するだけでなく、Javacriptはシングルスレッドであるため、変数を変更する機会を誰にも与えずに、永久にループします。
できることは、他の人が依存しているテーブルを「イベント自体を発生させる」ように書き直すことです。これを行う方法はたくさんありますが、基本的には、盲目的に戻るのではなく、「継続」関数を呼び出すだけです。この関数は事前定義することも、パラメーターとしてどこかに渡すこともできます。
//this is just illustrative
//Your actual code will be probably very different from this.
function update_part(){
//do something
signal_finished_part()
}
var parts_done = 0;
function signal_finished_part(){
parts_done ++;
if(parts_done >= 5){
signal_all_parts_done();
}
}
function signal_all_parts_done()
{
//do something to table A
}
更新をトリガーするものすべてに対してコールバック関数を作成できます。面倒なコールバックを回避するために、promiseも使用して、更新操作で取得したデータに応じてテーブルの一部を更新することができます。提案を受け入れます。