防止在同一时间调用两次函数

时间:2015-09-02 17:41:11

标签: 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 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内部的调用,则可以减少任何可能的错误。

2 个答案:

答案 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)
}