我有一个使用I / O线发送和接收帧的功能。
var async = require('async');
function busFrame(TX, callback){
async.series([
function(callback){
sendFrame(TX, function(err){
console.log("Frame Transmitted");
return callback(err);
});
},
function(callback){
recieveFrame(function(err){
console.log("Frame Recieved");
return callback(err);
});
}
],
function(err){
return callback(err);
});
}
busframe
函数需要一些时间来执行,因为它使用I / O行,当我快速调用它时,它会在同一时间内执行多次。像这样:
busFrame([1,2,3], function(err){
});
busFrame([4,5,6], function(err){
});
输出结果为:
Frame Transmitted
Frame Transmitted
Frame Recieved
Frame Recieved
我想阻止在同一时间内多次调用该函数,并且应该延迟任何其他调用,直到返回第一个调用。
我知道我可以使用busFrame
调用函数async.series()
,但如果有办法阻止来自busFrame
内部的调用,则可以减少任何可能的错误。
答案 0 :(得分:0)
你可以通过在" Frame Transmitted"设置一个布尔值(例如is_processing
)为true来实现这一点,并在" Frame Received"设置为false。
当is_processing
设置为true并调用方法时,将给定的参数设置为false,当设置为false时,处理队列中的下一个项目。
答案 1 :(得分:0)
您也可以尝试使用单例设计模式,该模式只会导致您调用的函数的一个实例。
即。
Public [type] getinstance() {
if instance == null {
instance = new [type];
}
return (instance)
}