如何等待未知调用者调用函数?

Posted

技术标签:

【中文标题】如何等待未知调用者调用函数?【英文标题】:How can I wait for a function to be called by an unknown caller? 【发布时间】:2022-01-22 23:10:06 【问题描述】:

我有一个回调函数,它被我无法控制的其他对象调用。我需要等到这个回调函数被调用,我不管是谁。

var successFunc = function() 
    // do stuff


myObject.onSuccess = successFunc;

// hang on until successFunc is called...

我找到了这个 hacky 解决方法,但它很糟糕:

var completed = false;

var successFunc = () => 
    // do stuff
    completed = true;


myObject.onSuccess = successFunc;

while (!completed) 
    sleep(200); // sleeps for 200 ms

【问题讨论】:

你需要使用一个 promise developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 或者在你的 successFunc 中调用下一步 【参考方案1】:

创建一个promise,将它的resolve函数作为回调传递给未知的调用者,听promise的解析:

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);

【讨论】:

以上是关于如何等待未知调用者调用函数?的主要内容,如果未能解决你的问题,请参考以下文章

java bio总结

如何理解阻塞和非阻塞同步和异步

如何理解阻塞和非阻塞同步和异步

JS 回调函数怎么指定函数调用者

阻塞非阻塞同步异步

NIO,AIO,BIO