簡體   English   中英

如何在完成回調之前停止JS函數的執行

[英]How to stop a JS function from completing until a callback has executed

這是我的情況:

我正在提供有限API的webapp的范圍內工作。 該應用程序具有選項卡,並提供一個“標簽關閉”事件,我可以在自己的JS中收聽。 問題是,每當用戶關閉選項卡時,我都需要調用一個異步函數來存儲一些數據,但是由於一旦事件偵聽器完成,該選項卡(以及我的JS代碼)就會消失,因此我的回調函數和操作結果永遠不會運行。

setTimeout不起作用,因為它只是另一個回調,它也不會阻止偵聽器完成。

我需要的是類似

   var end = false;
   saveStuff(function(result){
       if(result.ok){
           end=true;
       }
   });

   while(!end) {
     //Do nothing until callback has returned
   }

但是JS不能那樣工作。 要實現類似的目標,我能做的第二件事是什么?

您應該使用Promises:

var end = false;
var promise = new Promise(function(resolve, reject) {
    saveStuff(function(result){
        if(result.ok){
            resolve("some value");
        }
    });
});

promise.then(function(value){
// do stuff
});

在您調用resolve之前,promise將一直處於待處理狀態,然后將對其進行解析並在then內部調用該函數。 使用該字符串解析時,value將為“某個值”。

有關此的更多信息: https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Using_promises

一種方法是為此使用自定義事件:

var event = new Event('myfunctioncompleted');

saveStuff(function(result){
   if(result.ok){
       // Dispatch the event.
       elem.dispatchEvent(event);           
   }
});

// Listen for the event.
elem.addEventListener('myfunctioncompleted', function (e) { 
   // do the things after event.
}, false);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM