I have a callback function that gets called by some other object which I can’t control. I need to wait until this callback function is called, I don’t care by who.
JavaScript
x
8
1
var successFunc = function() {
2
// do stuff
3
}
4
5
myObject.onSuccess = successFunc;
6
7
// hang on until successFunc is called...
8
I found this hacky workaround, but it sucks:
JavaScript
1
13
13
1
var completed = false;
2
3
var successFunc = () => {
4
// do stuff
5
completed = true;
6
}
7
8
myObject.onSuccess = successFunc;
9
10
while (!completed) {
11
sleep(200); // sleeps for 200 ms
12
}
13
Advertisement
Answer
Create a promise, pass its resolve
function as callback to the unknown caller somehow, listen to the promise’s resolution:
JavaScript
1
9
1
let callback;
2
const promise = new Promise(r => callback = r);
3
4
promise.then(() => console.log('unknown caller called'));
5
6
setTimeout(function unknownCaller() {
7
console.log('randomly calling back');
8
callback();
9
}, Math.random() * 5000);