Javascript 防止函数在同一时间被调用两次
我有一个使用I/O线发送和接收帧的函数Javascript 防止函数在同一时间被调用两次,javascript,node.js,Javascript,Node.js,我有一个使用I/O线发送和接收帧的函数 var async = require('async'); function busFrame(TX, callback){ async.series([ function(callback){ sendFrame(TX, function(err){ console.log("Frame Transmitted"); return callba
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);
});
}
总线框架
函数需要一些时间来执行,因为它使用I/O线,当我快速调用它时,它会在同一时间执行多次。像这样:
busFrame([1,2,3], function(err){
});
busFrame([4,5,6], function(err){
});
输出为:
Frame Transmitted
Frame Transmitted
Frame Recieved
Frame Recieved
我想防止函数在同一时间被多次调用,任何其他调用都应该延迟到第一次调用返回为止
我知道我可以使用
async.series()
调用函数busFrame
,但如果有办法防止调用从busFrame
本身内部进行,则可以减少任何可能的错误 您可以通过将布尔值(例如,is_processing
)在“帧传输”处设置为true,在“帧接收”处设置为false来实现这一点
当
is\u processing
设置为true并调用该方法时,将给定的参数放入队列中,当设置为false时,处理队列中的下一项。您也可以尝试使用singleton设计模式,该模式将只生成所调用函数的一个实例
即
所以不要在函数内部使用异步调用吗?我不明白,如果你能举个例子的话,这将非常有帮助。谢谢
Public [type] getinstance() {
if instance == null {
instance = new [type];
}
return (instance)
}