我試圖連接到第三方庫,它具有可以阻止的功能。我想使用它,但沒有阻塞。是否有可能包裝一個我無法控制的阻止呼叫,使其成爲異步?觀看阻止呼叫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
你不會通過把它放在回調中來使異步代碼異步。您只需延遲阻塞呼叫,直到下一個事件打勾。考慮產生一個子進程,並等待它完成或使用光纖,如果一切都失敗。 –