Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 同时只运行该函数一次_Javascript - Fatal编程技术网

Javascript 同时只运行该函数一次

Javascript 同时只运行该函数一次,javascript,Javascript,我有以下问题。首先,我的代码到目前为止: function Auktionator() { this.versteigern = function(objekt) { for(var i = 1; i <=3; i++) { setTimeout(function(x) { return function() { console.log(objekt + " zum " + x); }; }(i), 1000*i); } };} 函数Auktion

我有以下问题。首先,我的代码到目前为止:

function Auktionator() {
this.versteigern = function(objekt) {
      for(var i = 1; i <=3; i++) {
         setTimeout(function(x) { return function() { console.log(objekt + " zum " + x); }; }(i), 1000*i);
     }
};}
函数Auktionator(){
this.versteigern=函数(objekt){

对于(var i=1;i而言,黑客的解决方法是添加一个变量
isRunning

// Static variable shared by all instance 
Auktionator.isRunning = false;
然后,在开始执行时,检查是否
Auktionator.isRunning===false
,将其设置为
true
,并在完成后将其设置回
false

在一些异步调用之后,您可以使用多种选项来执行代码:
,一些或。

黑客的解决方法是添加一个变量
isRunning

// Static variable shared by all instance 
Auktionator.isRunning = false;
然后,在开始执行时,检查是否
Auktionator.isRunning===false
,将其设置为
true
,并在完成后将其设置回
false

在一些异步调用之后,您可以使用多种选项来执行代码:
,一些或。

您可以有一个全局变量

var函数使用=0

然后加上

function\u in\u use=1
在函数内容的最开始处,并在return语句之前添加
function\u in\u use=0
。然后可以将整个内容包装在
if
语句中:
if(!function\u in\u use){…


我不知道这是否适合您的特殊需要。这类似于C语言中导入“filename”语句的工作方式。

您可以有一个全局变量

var函数使用=0

然后加上

function\u in\u use=1
在函数内容的最开始处,并在return语句之前添加
function\u in\u use=0
。然后可以将整个内容包装在
if
语句中:
if(!function\u in\u use){…


我不知道这是否适合您的特殊需要。这类似于C语言中的
#import“filename”
语句的工作方式。

跟踪运行的超时次数,并使用一个guard子句防止并发运行

function Auktionator() {
    this.versteigern = function (objekt) {
        if (Auktionator.LOCKS > 0) {
            console.log('running');
            return;
        }

        for (var i = 1; i <= 3; i++) {
            Auktionator.LOCKS++;
            setTimeout(function (x) {
                return function () {                        
                    console.log(objekt + " zum " + x);
                    Auktionator.LOCKS--;
                };
            }(i), 1000 * i);
        }
    };
}

Auktionator.LOCKS = 0;

new Auktionator().versteigern()
new Auktionator().versteigern()
函数Auktionator(){
this.versteigern=函数(objekt){
如果(Auktionator.LOCKS>0){
console.log('running');
返回;
}

对于(var i=1;i跟踪正在运行的超时次数,并使用一个guard子句来防止并发运行

function Auktionator() {
    this.versteigern = function (objekt) {
        if (Auktionator.LOCKS > 0) {
            console.log('running');
            return;
        }

        for (var i = 1; i <= 3; i++) {
            Auktionator.LOCKS++;
            setTimeout(function (x) {
                return function () {                        
                    console.log(objekt + " zum " + x);
                    Auktionator.LOCKS--;
                };
            }(i), 1000 * i);
        }
    };
}

Auktionator.LOCKS = 0;

new Auktionator().versteigern()
new Auktionator().versteigern()
函数Auktionator(){
this.versteigern=函数(objekt){
如果(Auktionator.LOCKS>0){
console.log('running');
返回;
}

对于(var i=1;i),您需要更清楚地了解
的含义[…]可以同时运行函数[…]
js code从不并行运行,因此
setTimeout
的回调函数总是按顺序运行,而不是并行运行。你可以为每个函数指定100毫秒。它们将一起执行。啊,好吧,现在我想我明白了,如果调用
versteigern
,你想防止调用
versteigern
d被另一个
Auktionator
执行,直到最后一次
setTimeout
回调执行为止?@torazaburo他们已经一个接一个地运行
setTimeout(…,1000*i)
@t.niese是的,没错!很抱歉,在这种情况下,您需要更清楚地了解
[…]的意思,您可以同时运行该函数[…]
js code从不并行运行,因此
setTimeout
的回调函数总是按顺序运行,而不是并行运行。你可以为每个函数指定100毫秒。它们将一起执行。啊,好吧,现在我想我明白了,如果调用
versteigern
,你想防止调用
versteigern
被另一个
Auktionator
执行最后一次
setTimeout
回调之前?@torazaburo他们已经一个接一个地运行
setTimeout(…,1000*i)
@t.niese是的,没错!抱歉,谢谢你的帮助!谢谢你的帮助!