正确的尝试从通过异步系列运行的任务列表中获得进展
/sys/device/system/cpu/cpufreq/ondemand
这是我的代码的一个非常简单的版本。
问题
如何将条形图传递给每个函数或“通过”函数和回调到每个可以使用的任务成功的回调
module.exports = update;
function update(){
// Require Deps
var async = require('async');
var progress = require('progress);
var tasks = [task1,task2,task3];
// Create the progress bar using the list of tasks
// as the length of the bar
var bar = new progress(':current/:total [:bar] :task', {
total: tasks.length
});
//Run async series using the array of tasks
async.series(tasks,function(err,result){
// Do something with the results or errors
})
};
var task1 = function(callback){
callback();
};
var task2 = function(callback){
callback();
}
我尝试的一切我得到的栏没有定义所以尝试通过回调函数(回调,栏)将栏传递给函数然后我得到勾选未定义
我是nodeJs和well js的新手,所以请保持温和
注意我想要实现的是完成在进度条中显示当前任务的功能列表 我已经阅读了文档,并查看了进展和异步的示例,但仍然可以做出正面或反面
我是关闭还是有更好的方法
答案 0 :(得分:0)
每次要更新任务栏中的当前任务时,都应添加bar.tick
。例如:
var task1 = function(callback){
bar.tick({bar:'Finish First Task'})
callback();
};
所有函数(task1,task2)都应在update
函数的INSIDE中声明,否则它们将无法访问bar
变量。
答案 1 :(得分:0)
我不确定它是最好的解决方案,但是在进行回调和请求结果时,我有一些计数器,然后我会在我的" final"回调:
即。有一个全局的(在函数更新()之前)
var tasksStatus = {task1:false,task2:false,task3:false};
然后在每个任务函数集中
var task1 = function(callback){
tasksStatus.task1 = true;
callback();
};
然后,您可以检查完成任务的全局变量并采取相应的行动。
编辑:示例回调可能是:
callback = function () {
var status = 0;
for(var s in tasksStatus) {
if(tasksStatus[s])
status += 33;
}
// update progress
if(status == 99) {
// done....
}
}
答案 2 :(得分:0)
这有点复杂,对不起。我们所做的是创建新函数而不是数组中的函数。我们称之为原始函数的新函数,当原始函数完成(回调)时,它将调用progress.tick
,之后它将运行原始回调函数。
var tasks=[task1,task2,task3]
for (var i in tasks){
(function(orgFunc,i){ // This Function will be run on task1,task2,task3. `i` will be 0,1,2, `orgFunc` will be the original function.
tasks[i]=function(next){ // Replace the original function with new function
orgFunc(funtion(){ // Call the original function
bar.tick({bar:'Finish Task #' + i})
next.apply(null,arguments) // Call the callback.
})
}}).bind(null,tasks[i],i)
}