2016-03-21 1 views
4

を終了するまで機能を無効にします。Javascriptの一時停止 - もう一つは、最初のものはものを選択し、他のは、このように、遅延とそれを評価し、私は2つの機能を持っている

function select() { 
    // selecting stuff 
    window.setTimeout(evaluate, 1000); 
} 
function evaluate() { 
    // evaluating stuff 
} 

問題があり、選択機能があるべき秒が完了するまで無効になります。私はそれが完全にJavascriptを一時停止することは不可能であることを知っているが、最初の機能は、他の人が待っている間に発砲したり真剣にすべてを駄目にしている。私はすでにコードを他の関数に移動して遅延させようとしましたが、何も動作しません。

ありがとうございます!

+0

https://api.jquery.com/jquery.when/ –

答えて

1

誰がそれは不可能だと言ったのですか?

var timeout = null; 
function select() { 
    if(timeout) { // check if the timer ID is set 
     return; 
    } 
    // selecting stuff 
    timeout = window.setTimeout(evaluate, 1000); // return the ID of the timer 
} 
function evaluate() { 
    // evaluating stuff 
    window.clearTimeout(timeout); // clear the timer ID 
    timeout = null; // reset the timer ID 
} 
1

この問題はコールバックを使用する必要があると思います。コールバックは、別の関数が実行された後に実行される関数です。このようにして、あなたの他の機能が実行された後に機能が実行されることを保証します。また、どのようにデータを取得していますか?多くのSQL関数には、コールバック関数(成功関数)が組み込まれており、他の関数を呼び出すために使用することができます。コールバック地獄で終わる可能性がありますが、他の関数コールバックを使用してデータの処理を続行します。

ここに優秀な記事:

http://dreamerslab.com/blog/en/javascript-callbacks/

1

このような状況を処理するための正しい方法は約束を使用しています。私はQライブラリ(https://github.com/kriskowal/q)を使うのが好きですが、もちろんjqueryを使うこともできます。評価が完了するまで は、あなたが選択し実行したいとしましょう、実行が評価し、無効を選択します

var deferred = jQuery.Deferred(); 

function select() { 
    if (deferred.state() === "pending") { 
     console.log("Evaluate not finished"); 
    } else { 
     // select stuff 
     evaluate(deferred.promise()); 
    } 
} 

function evaluate(promise) { 
    // evaluating stuff 
    promise.resolve(); 
} 
関連する問題