这是我的情况:
我正在提供有限API的webapp范围内工作。该应用程序有标签,并提供一个'Tab Close'事件,我可以在我自己的JS中听。问题是,每当用户关闭一个标签时,我需要调用一个异步函数来存储一些数据,但是因为一旦事件监听器完成,标签(以及我的JS代码)就会消失,我的回调函数与我的行为的结果永远不会运行。
setTimeout
不起作用,因为它只是另一个回调,它也不会阻止侦听器完成。
我需要的是像
var end = false;
saveStuff(function(result){
if(result.ok){
end=true;
}
});
while(!end) {
//Do nothing until callback has returned
}
但是JS并没有这样做。为实现类似的目标,我能做的最好的事情是什么?
答案 0 :(得分:1)
你应该使用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,然后它将被解析并调用其中的函数。当您使用该字符串解析时,value将是“某个值”。
更多相关信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises
答案 1 :(得分:0)
一种方法是为此使用自定义事件:
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);