2017-10-04 33 views
0

我調用一個函數功能:此功能我稱之爲有言語另一個函數如何取消這是所謂的另一個功能

$(document).on('click', '#home', function() { 
    runfunction2('', ''); // for stopping speech 
    runfunction(956, 0); 
}) 

。 (https://github.com/vilic/cordova-plugin-tts

function runfunction(post_id, step){ 
    runfunction2('example text', 'starttimer', post_id, step); 
} 

function runfunction3(text, end, post_id, step){ 
TTS.speak({ 
    text: text, 
    locale: 'de-DE', 
    rate: 1.5 
}, function() { 

    if (end == "startrec") { 
     console.log("startrec gestartet");    

     mediaPlay3.play(); 

     setTimeout(function() { 
      mediaPlay3.stop();  
      startRecognition(post_id, step);   
     }, 1000); 

     setTimeout(function(){ 
      // Do something after 3 second 
      stopRecognition(); 
     } , 4000);  
    } else if (end == "newtry"){ 
     console.log("newtry gestartet"); 

     mediaPlay3.play(); 

     setTimeout(function() { 
      mediaPlay3.stop();   
      startRecognition(post_id, step);   
     }, 1000); 

     setTimeout(function(){ 
      // Do something after 3 second 
      stopRecognition(); 
     } , 4000);     
    } else if (end == "starttimer"){ 
      timer(post_id, step); 
    } else { 
     // 
    } 
} 

如果我的家庭再次按鈕我要從頭開始它的過程中點擊。問題是第一個函數尚未完成並且正在後臺運行(仍然調用第二個函數)。但是我想取消所有的一切,讓一切從頭開始。這怎麼可能?

+3

這當然是可能的,但你必須自己創建的取消邏輯,它不是一個「內置」一個JS功能的作用。你究竟是怎麼做的,取決於執行什麼邏輯,而你沒有顯示出來,所以沒有人能真正給你一個明確的答案。 –

+0

向我們展示'runfunction'和'runfunction2'包含的內容。 – Justinas

+0

對不起,我現在試着更詳細地解釋它。 – desmeit

回答

1

下面的代碼是模擬線程,你可以使用這個代碼。 HTML:

<button type="button" class="btn btn-primary" id="btnStart">Start</button> 
<button type="button" class="btn btn-default" id="btnCancel">Cancel</button> 

JS:

$(document).ready(function() { 
    $('#btnStart').on('click', infinityFunction); 
    $('#btnCancel').on('click', cancelProcess); 

}); 
var busy = false; 
var cancelled = false; 

var processor = []; 
var countN = 0; 
function infinityFunction() { 
    if(cancelled){ 

     if(processor.length > 0){ 
      clearTimeout(processor[0]); 
      processor.splice(0,1); 
     } 
     busy = false; 
     cancelled = false; 
     countN = 0; 
     return; 
    } 
    if(!busy) { 
     busy = true; 
     console.log('Processing some code :'+countN); 
     countN++; 
     if(processor.length > 0){ 
      clearTimeout(processor[0]); 
      processor.splice(0,1); 
     } 
     var myProcessor = setInterval(infinityFunction, 1000); 
     busy = false; 
     processor.push(myProcessor); 
     console.log(processor); 

    }else{ 
     console.log('I am busy now'); 

    } 

} 

function cancelProcess() { 
    cancelled = true; 
}