1

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

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

然后我从一个需求中调用这个插件:

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

问题: “继续工作”有什么方法可以检查“我的代码是异步的”是否正在运行或完成?等它吗?

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

4

2 回答 2

3

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

于 2013-09-10T22:58:16.467 回答
-1

问题:...等一下?

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

首先,“动作”应该有一个回调作为参数,因为正如您在示例中所写的那样,它是一个异步函数(立即返回)但它没有回调。

您的代码带有wait.for:

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

然后从需求中调用这个插件:

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

于 2013-09-11T01:05:59.143 回答