来自动态生成的函数数组nodeJs

时间:2016-01-29 22:58:47

标签: javascript arrays node.js asynchronous

所以我正在开发一个从cli运行更新任务的nodejs任务

我的代码片段

var
  npm,
  grunt,
  async,
  path,
  which,
  color,
  isRoot,
  progressBar,
  EventEmitter,
  exec,
  utils,
  format;

function loadDependencies() {
  npm = require('npm');
  grunt = require('grunt');
  async = require('async');
  path = require('path');
  which = require('which');
  color = require('cli-color');
  isRoot = require('is-root');
  progressBar = require('progress');
  EventEmitter = require("events").EventEmitter;
  exec = require('child_process').exec;
  utils = require('../utils');
  format = require('util').format
}

// Expose my module
module.exports = update;

function update(args, options, callback, ee){
  //Load all my deps 
  loadDeps();
  // Create my array
  var taskCollection = [];
  // Convert the update object with its functions into an array
  for(var tasks in update){
      taskCollection.push('update.' + tasks);
  }

**玩完之后我决定尝试在这里添加以下数组**

taskCollection = [update.one, update.two];

它按原样运行任务,所以我现在只能假设它是如何制作我的阵列

  //And this is were im stuck *
  async.series(taskCollection,
    function(err,result){
    console.log(error);
    console.log(result);
  });

}

update.one = function(callback){
    callback(null, 'Update One Complete);
}

update.two = function(callback){
    callback(null, 'Update Two Complete);
}

现在的想法是,我的更新对象会自动填充异步运行的任务列表,这意味着这样的事情

update.bower = function(){}
update.grunt = function(){}

将由异步运行,但其他任务如

var getVersion = function(){}

当我想在我创建的任务数组上运行异步时,问题就来了我不断得到错误任务()不是函数

我试图使用

async.series(taskCollection, finish);

以及某种

的变体
async.each(taskCollection);

最终目标是将添加一个进度条,因此每个函数的回调都将调用progress.tick(),其中的滴答数将从任务列表中自动计算

前进的最佳方式是什么? 哪个async(NodeJs Version)任务是最好的系列,因为我希望它们按顺序排列,因为它们是一个函数数组?

先谢谢我把头撞在墙上

更新!!

错误是从async.js生成的:718并说

task(_restParam(function (err,args))) {
^
TypeError: task is not a function

1 个答案:

答案 0 :(得分:0)

我传递异步字符串而不是对象。 考虑以下: 的console.log(更新); //你得到了 {[功能:更新]一:[功能],两个[功能]} 所以在我上面的代码中 // Translation - 对于更新对象中的所有键 for(var tasks in update){   //将该键作为字符串推送:(   taskCollection.push('更新。' +任务);  } 将for更新为以下内容: for(var obj in tasks){     taskCount.push(OBJ);     taskCollection.push(任务[OBJ]); } 现在taskCount将生成一个函数名称数组 和taskCollection在传递给异步时会起作用:)