[英]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.