我试图连接到第三方库,它具有可以阻止的功能。我想使用它,但没有阻塞。是否有可能包装一个我无法控制的阻止呼叫,使其成为异步?观看阻止呼叫nodejs
// calling this function will block the nodejs thread
blockingCall();
我想是这样的。
// wrapper for the blocking call
var wrapper = wrapBlockingCall(blockingCall);
wrapper.on('complete', function() {});
这可能吗?这有意义吗?
我不知道你在做什么,但我建议你不要这样做。如果你想在同步调用之后发生一些事情,在它后面放置一个语句。我不完全确定你为什么要'观看'同步通话。我们可能需要关于您正在使用的图书馆的更多信息,或者您正面临的问题(而不是您想要的)。 –
所以,问题是,客户端库是一个多线程的C库,我已经为它做了一个nodejs包装。因为它的工作方式,它要求客户端(nodejs)提供一个阻塞调用,而它自己则调用客户端中的一个函数(nodejs),这将导致第一次调用解除阻塞。因为节点是单线程的,这只是一个僵局。我想知道是否可以解决这个问题,将c调用转换为异步调用,然后将所有逻辑放在回调函数中。我希望这是有道理的 – 6D65
你不会通过把它放在回调中来使异步代码异步。您只需延迟阻塞呼叫,直到下一个事件打勾。考虑产生一个子进程,并等待它完成或使用光纤,如果一切都失败。 –