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.
var successFunc = function() { // do stuff } myObject.onSuccess = successFunc; // hang on until successFunc is called...
I found this hacky workaround, but it sucks:
var completed = false; var successFunc = () => { // do stuff completed = true; } myObject.onSuccess = successFunc; while (!completed) { sleep(200); // sleeps for 200 ms }
Advertisement
Answer
Create a promise, pass its resolve
function as callback to the unknown caller somehow, listen to the promise’s resolution:
let callback; const promise = new Promise(r => callback = r); promise.then(() => console.log('unknown caller called')); setTimeout(function unknownCaller() { console.log('randomly calling back'); callback(); }, Math.random() * 5000);