2016-08-29 6 views
0

私はJavaScriptを勉強しており、非同期呼び出しが行われたかどうかをチェックするための公開関数を書きますが、まだ応答が保留中(つまり、プロセスが実行中)であることを確認するタスクがあります。プロセスが進行中の場合はtrue、そうでない場合はfalseを返す必要があります。ランニングにおいてコールバックが保留中であることを確認する方法はありますか?

function Machine() { 
    function onReady() { 
    alert('ready!'); 
    } 
    this.setOnReady = function(newOnReady) { 
    onReady = newOnReady; 
    }; 
    this.run = function() { 
    setTimeout(function() { 
     onReady(); 
    }, 10000); 
    }; 
} 

var machine = new Machine(); 
alert('before the run: ' + machine.isRunning()); // before: false 
machine.run(); 
alert('is running: ' + machine.isRunning()); // is running: true 
machine.setOnReady(function() { 
    alert("after: " + machine.isRunning()); // after: false 
}); 
+0

は私に先生すみません、私の書式設定や質問は私のために、より明確だったと私はそうではない東ヨーロッパからの人々のためだと思います英語ではるかに話す。 – pavlo

答えて

1

は、あなたがそれをコーディングできる方法です:

function Machine() { 
 
    // add this private variable 
 
    var isRunning = false; 
 
    function onReady() { 
 
    alert('ready!'); 
 
    } 
 
    this.setOnReady = function(newOnReady) { 
 
    onReady = newOnReady; 
 
    }; 
 
    this.run = function() { 
 
    isRunning = true; // set flag 
 
    setTimeout(function() { 
 
     isRunning = false; //clear flag 
 
     onReady(); 
 
    }, 2000); // 2 seconds, I don't have patience! 
 
    }; 
 
    // Add this method: 
 
    this.isRunning = function() { 
 
    return isRunning; 
 
    } 
 
} 
 

 
var machine = new Machine(); 
 
console.log('before the run: ' + machine.isRunning()); // before: false 
 
machine.run(); 
 
console.log('is running: ' + machine.isRunning()); // is running: true 
 
machine.setOnReady(function() { 
 
    console.log("after: " + machine.isRunning()); // after: false 
 
});

+0

非常に感謝しています! – pavlo

1

()、あなたのisRunning()メソッドが戻ること(this.running = true;を介して)trueにオブジェクトにフラグを設定します。

実行が終了したら、falseに戻します。ここで

+0

私はあなたには分かりませんでしたが、あなたの答えは私にこれを押し付けました: 'function Machine(){ var running = false; 関数onReady(){ アラート( 'ready!'); } this.setOnReady = function(newOnReady){ onReady = newOnReady; }; this.run = function(){ running = true; setTimeout(function(){ onReady(); }、1000); }; this.isRunning = function(){ return running; } } ' – pavlo

+0

ニース!それは@ trincotの答えと非常によく似ているようですので、どうぞお待ちください:) – jedifans

+0

申し訳ありません。私は今もコメントの書式を設定する方法はありません – pavlo

関連する問題