node.async parallel : 我们可以创建动态文本来表示任务吗?

node.async parallel : can we create dynamic texts to denote tasks?

在节点异步方法中,我们将任务定义为 "one" 或 "two",如下例所示。有没有办法使该文本动态化?

    var async = require("async");
    async.parallel({
        one: function(callback){
            setTimeout(function(){
                callback(null, 1);
            }, 200);
        },
        two: function(callback){
            setTimeout(function(){
                callback(null, 2);
            }, 100);
        }
    },
    function(err, results) {
        console.log(results); // results is now equals to: {one: 1, two: 2} 
    });

我同意 的观点,如果提供更多有关您尝试执行的操作的详细信息,您可能会从中受益。也就是说,我将简单地回答问题。

是的,可以动态计算对象的键。这适用于任何对象,而不仅仅是您传递给 async.parallel() 的对象。也许 Node 中可用的最优雅的解决方案是利用新的 ES2015 功能:computed property names.

'use strict';

const async = require('async');

function dynmaicAsync(fnOne, fnTwo) {
  async.parallel({
    [fnOne](callback) { ... },
    [fnTwo](callback) { ... }
  },
  (err, results) => console.log(results));
}

dynmaicAsync('un', 'deux');
// { un: 1, deux: 2}

上面的例子也使用了 ES2015 shorthand method definition syntax,这使我们不必使用 function 关键字来定义对象字面量的方法。

或者,如果您不想使用这些 ES2015 功能,您可以这样做:

'use strict';

var async = require('async');

function dynmaicAsync(fnOne, fnTwo) {
  var fns = {};
  fns[fnOne] = function { ... };
  fns[fnTwo] = function { ... };
  async.parallel(fns, function(err, results) { ... });
}