Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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,node.js_Javascript_Node.js - Fatal编程技术网

并行函数javascript,node.js

并行函数javascript,node.js,javascript,node.js,Javascript,Node.js,有没有关于如何修复这个“f”函数(paralell)的想法,输出nedd的外观 f的活动开始 f的活动开始 f的活动开始 f的活动结束 f的活动结束 f的活动结束 完成了 有时有效,但并不总是,任何关于如何修复的想法(任务是不修改“f”函数) 多谢各位 function f(cb) { console.log("f's activity starts."); var t = Math.random() * 500; //gives a num between 0 and 1000

有没有关于如何修复这个“f”函数(paralell)的想法,输出nedd的外观

f的活动开始

f的活动开始

f的活动开始

f的活动结束

f的活动结束

f的活动结束

完成了

有时有效,但并不总是,任何关于如何修复的想法(任务是不修改“f”函数)

多谢各位

function f(cb) {
  console.log("f's activity starts.");
  var t = Math.random() * 500; //gives a num between 0 and 1000

  function onActivityDone() {
    console.log("f's activity ends.");
    if (cb) cb();
  }
  setTimeout(onActivityDone, t);

}

function final() {
  console.log('Done');
}

function first() {
  final();
}



f()
{     
f()
{
    f(first)
  };
};

这一点看起来有点奇怪

f()
{     
f()
{
    f(first)
  };
};
看起来你想做这样的事

f(function() {
  f(function() {
    f(first);
  });
});

马切克给了你问题的答案

您的代码的作用相当于:

f();
f();
f(first);
大括号只是打开不必要的代码块

编辑:在阅读您的评论后,我认为您可能想做:


根据我编辑的答案的评论:

function f(cb) {
    console.log("f's activity starts.");
    var t = Math.random() * 500; //gives a num between 0 and 1000

    function onActivityDone() {
        console.log("f's activity ends.");
        if (cb) cb();
    }
    setTimeout(onActivityDone, t);
}

function final() {
    console.log('Done');
}

var iterations = 1000,
    ended = 0,
    i;

function first() {
    ended++;
    if(ended == iterations) {
        final();
    }
}

for(i = 0; i < iterations; i++) { f(first) }
功能f(cb){
log(“f的活动开始”);
var t=Math.random()*500;//给出一个介于0和1000之间的数值
函数onActivityDone(){
log(“f的活动结束”);
if(cb)cb();
}
设置超时(onActivityDone,t);
}
函数final(){
console.log('Done');
}
var迭代次数=1000,
结束=0,
我
函数优先(){
结束++;
如果(结束==迭代次数){
最后的();
}
}
对于(i=0;i
其思想是仅在触发第1000次回调时运行
final
函数。另外,
setTimeout
with
0
time将始终等待父线程结束-根据MDN文档:

需要注意的是,函数或代码段不能 执行,直到调用setTimeout()的线程终止


这就是为什么所有的“开始”都在“结束”之前。

f接受未定义的参数,因此代码实际上可以工作。它根本不符合可能的意图;)是的,代码可以工作,但是打印不同的输出,想法是在同一时间启动所有函数,然后在同一时间结束所有函数,最后打印完成。唯一的问题是我需要在同一时间启动所有函数(3),然后结束所有函数,并在所有函数完成后打印完成。f的活动开始。f的活动开始。f的活动开始。f的活动结束。f的活动结束。f的活动结束。完成。感谢您的代码,我将先尝试理解它,然后尝试修改我的代码。。谢谢,不客气。JSFIDLE非常清楚我的代码是做什么的,但我不确定这是否是您想要的。我在这方面非常新,我只需要打印第一行,f activity start(3次),然后打印f activity end(3次),然后打印Done。试试看,它将显示您期望的消息。在我看来,如果不修改
f
函数,就无法完成此操作。。。如果
var t
0
,则在
f
完成执行后立即触发
onActivityDone
Math.random()
是随机的,因此您无法控制ActivityOne
函数的执行时间,
cb
也是如此。唯一知道的是它会在一秒钟内发生。我也是这么想的,但教授说这是可能的,我也会这么做。卡洛斯的可能复制品,谢谢你的帮助,我尝试了你的代码,得到了相同的输出,出于某些原因,有时您的代码和我的代码会在“fs活动结束”之间打印“完成”,其想法是在所有活动完成后打印“完成”。您能否更改
最终
第一次
功能?再次:您能否更改
最终
第一次
功能?
function f(cb) {
    console.log("f's activity starts.");
    var t = Math.random() * 500; //gives a num between 0 and 1000

    function onActivityDone() {
        console.log("f's activity ends.");
        if (cb) cb();
    }
    setTimeout(onActivityDone, t);
}

function final() {
    console.log('Done');
}

var iterations = 1000,
    ended = 0,
    i;

function first() {
    ended++;
    if(ended == iterations) {
        final();
    }
}

for(i = 0; i < iterations; i++) { f(first) }