检查NodeJS中的延迟异步代码

时间:2013-09-10 22:42:58

标签: node.js 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

问题:“继续填写”是否有办法检查“我的代码是否异步”是否正在运行或已完成?等等呢?

注意:在我的真实代码中,插件必须调用callback()。这个问题的目的是在插件的代码忘记调用我的回调()

时做一些事情

2 个答案:

答案 0 :(得分:3)

我不相信,但如果插件在特定时间内没有调用回调,则可以使用setTimeout来调用函数。如果调用回调,则清除超时。

答案 1 :(得分:-1)

  
    

问题:......等等吗?

  

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

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

使用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编程。