在NodeJS中检查延迟的asynchronous代码

有点棘手的问题,首先,我有一个插件:

exports.action = function(){ // Running synchronous code runMyRequest("path/to/url", function(){ // My code is asynchronous }); } 

然后我从一个require调用这个插件:

 var plugin = require('myplugin') plugin.action(); // continue stuff 

问题:有没有什么办法可以检查“我的代码是asynchronous的”是否正在运行或完成? 等等呢?

注意:在我的真实代码中,插件必须调用callback函数()。 这个问题的目的是做一些事情,如果插件的代码忘记调用我的callback()

我不这么认为,但是如果插件没有在特定的时间内调用callback函数,你可以使用setTimeout来调用一个函数。 如果调用callback,则清除超时。

问:…等等呢?

我最近创build了一个名为WaitFor的简单抽象,以同步模式调用asynchronous函数(基于Fibers): https : //github.com/luciotato/waitfor

首先,“动作”应该有一个callback作为参数,因为它是写在你的例子,它是一个asynchronous函数(立即返回),但它没有callback。

你的代码与wait.for:

 exports.action = function(callback){ // Running synchronous code runMyRequest("path/to/url", function(){ // My code is asynchronous ... callback(err,data); }); } 

然后从一个require调用这个插件:

 var wait = require('wait.for') var plugin = require('myplugin') ...in a fiber... wait.for(plugin.action); // waits until callback is called (WITHOUT BLOCKING NODE) // continue stuff 

Wait.for会给你其他的好处,比如顺序的try-catch编程。