0

私は本当にこの問題についてインターネットで長い間検索しました。前に呼び出された関数が終了したときにコードを実行したいだけです。この例で説明しましょう:

var id=0;

function refreshID(){
    //refresh the div
}

function postID(){
    //some code
    refreshID();
    id=1;    
}

関数 postID を呼び出すと、関数 refreshID が実行され、変数 id が 1 に設定されます。ただし、関数 refreshID() が完全に実行される前に変数が 1 に設定されていると思います。だから私の質問は次のとおりです。コードを実行する方法(この場合は変数の値を変更します)、別の関数が終了したとき、完全に実行されたとき。

よろしく

4

4 に答える 4

0

JavaScript はシングルスレッドであるため、コードは直線的に実行されることが保証されています。コード行がスキップされることはありません。

あなたの例でid = 1は、が戻った後に常に実行されます。refreshID物事をより複雑にしているのrefreshIDは、たとえば を使用して非同期的に処理を行うように設定できることです。setTimeoutこの場合refreshID、 はコールバックが実行される前に戻ります。その場合、コールバックを関数に渡すか、promise を使用すると便利な場合があります。

例えば:

var id = 0;

function refreshID(cb) {
    setTimeout(function () {
        // your work
        // ...

        cb();
    });
}

function postID(){
    // some code
    refreshID(function () { id = 1; });
}
于 2013-11-01T10:06:03.347 に答える
0

JavaScript は変数への同時アクセスを提供しません。refreshID は、id を 1 に設定する前に完全に実行されます。

于 2013-11-01T10:03:37.253 に答える
0

コールバックを使用できます:

function refreshID(doWhateverElse){
    //refresh the div
    doWhateverElse();
}

function postID(){
    //some code
    refreshID(function() { 
        id=1;
    } );
}

パラメータとして渡された関数はrefreshID、div が更新された後にのみ実行されます。

于 2013-11-01T10:03:41.947 に答える
0

いいえ、refreshID の呼び出しが完了する前に id に 1 が割り当てられることはありません。これは、JavaScript エンジン自体によって保証されます。他の回答で述べたように、それはシングルスレッドであり、実行行は1行しかありません。しかし、コードの実行に問題があると考える理由を説明するために、他のネットワーク/タイムアウト/間隔/...のajaxは必要ありません。関数 refreshID が html になんらかの変更を加えている場合、これらの変更はスクリプトの実行が終了するまで表示されないことに注意してください。

于 2013-11-01T10:16:48.330 に答える