一个小小的问题,首先,我有一个插件:
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()。这个问题的目的是在插件的代码忘记调用我的回调()
时做一些事情答案 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编程。