Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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_Asynchronous - Fatal编程技术网

Javascript 按顺序使用异步方法运行函数

Javascript 按顺序使用异步方法运行函数,javascript,asynchronous,Javascript,Asynchronous,我有一个函数数组,其中包含异步方法。我想创建一个函数,它接受函数数组并按顺序执行函数。我不知道如何实现它。谢谢帮助。函数本质上不是异步的。它是每个函数中的方法 例如 函数task1(){ log('task1:started'); setTimeout(函数(){ console.log('task1:finished'); }, 5000); } 函数task2(){ log('task2:started'); setTimeout(函数(){ console.log('task2:fini

我有一个函数数组,其中包含异步方法。我想创建一个函数,它接受函数数组并按顺序执行函数。我不知道如何实现它。谢谢帮助。函数本质上不是异步的。它是每个函数中的方法

例如

函数task1(){
log('task1:started');
setTimeout(函数(){
console.log('task1:finished');
}, 5000);
}
函数task2(){
log('task2:started');
setTimeout(函数(){
console.log('task2:finished');
}, 5000);
}
函数运行程序(任务){
//需要帮助实施
log('所需输出:');
log('task1:started');
console.log('task1:finished');
log('task2:started');
console.log('task2:finished');
}
经典答案 您必须接受回调才能实现这一点,例如

runner([task1,task2],function()){
log('tasks done!');
})
职能任务1(cb){
log('task1:started');
setTimeout(函数(){
console.log('task1:finished');
cb();
}, 100);
}
职能任务2(cb){
log('task2:started');
setTimeout(函数(){
console.log('task2:finished');
cb();
}, 100);
}
函数运行程序(任务,cb){
如果(!tasks.length){
返回cb();
}
设指数=0;
函数运行(){
var task=tasks[index++]
任务(索引===tasks.length?cb:run);
}
run();

}
如果不接受回调或不返回回调,您将很难知道何时会执行此任务finished@suraj.tripathi . 我不能在函数上使用.then属性,因为它们本质上不是异步的。它是每个函数中异步的方法nature@MarutiNandan您需要重写这些函数以接受回调或返回承诺。这是一个选项吗?如果这些函数在完成时没有任何方式发出信号,那么您就无能为力了。这似乎很不寻常,因为几乎所有异步函数都有某种方式(回调或承诺)让您知道它们已经完成。无需让
运行
下一步
和匿名回调三个单独的函数。我想不是这样。您还复制了很多代码,比如
任务。长度
检查。还有,为什么
index++
不在
next
内?您有权发表您的意见,我不会讨论实际或感知的文体问题。你可以自由地提供一个更好的实现。我也不是想开始讨论,我只是想给出一个提示和一个原因,说明我为什么没有投票,尽管答案很好:-)@Bergi:重新访问回调示例并为简洁而优化。