回调javascript函数parallel [英] Callback javascript function parallel

查看:219
本文介绍了回调javascript函数parallel的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用这个函数做一个回调,任务是不修改'f'函数。这个想法是启动所有函数(并行),然后结束所有函数并在结束时显示完成(在节点中运行)。

  function f(cb){
console.log(f's activity starts。);
var t = Math.random()* 500; //给出一个0到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(final)
};
};

这是输出的外观。

  f的活动开始。 

f的活动开始。

f的活动开始。

f的活动结束。

f的活动结束。

f的活动结束。

完成。

有时候我得到那个输出但不总是,大多数时候看起来像这样



f的活动开始。

  f开始活动。 

f的活动开始。

f的活动结束。

f的活动结束。

完成。

f的活动结束。

我不知道为什么:/


解决方案

我想你的最后一部分应该是这样的:

  f(function(){
f b $ bf(final)
});
});

输出将被预测:

  f的活动开始。 (索引):22 
f的活动结束。 (index):26
f的活动开始。 (索引):22
f的活动结束。 (index):26
f的活动开始。 (索引):22
f的活动结束。 (index):26
Done

您提供的以下代码甚至不可编译: / p>

  f(){
f(){
f(final)
};
};

也许你想要这样的东西:

  f(f(f(final))); 

但它也不正确,因为代码将执行错误的方向。 f(final)将首先执行!



EDIT b
$ b

如果您需要并行启动3个任务,请使用 https:// github .com / caolan / async#parallel


I'm using this function to do a callback, the task is to not modify the 'f' function. The idea is to start all functions(parallel) and then end all functions and display 'Done' at the end.(runing in node).

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(final)
  };
};

This is how the output is supposed to look.

f's activity starts.

f's activity starts.

f's activity starts.

f's activity ends.

f's activity ends.

f's activity ends.

Done.

Sometimes I got that output but not always, most of the time looks like this

f's activity starts.

f's activity starts.

f's activity starts.

f's activity ends.

f's activity ends.

Done.

f's activity ends.

and I have no idea why :/

Any ideas why..

Thank you !

解决方案

I guess your last part should look like this:

f( function() {
  f( function() {
    f(final)
  });
});

And the output will be predicted:

f's activity starts. (index):22
f's activity ends. (index):26
f's activity starts. (index):22
f's activity ends. (index):26
f's activity starts. (index):22
f's activity ends. (index):26
Done 

The following code you provided is not even compilable:

f() {
  f() {
    f(final)
  };
};

Maybe you wanted something like this:

f ( f ( f(final)));

But it is incorrect too, because code will be executed in the wrong direction. f(final) will be executed first!

EDIT

If you need to start 3 tasks in parallel use https://github.com/caolan/async#parallel

这篇关于回调javascript函数parallel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆