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是的,没错!抱歉,谢谢你的帮助!谢谢你的帮助!