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

时间:2016-02-21 03:07:49

标签: node.js node-async

在内部节点异步方法中,我们将任务定义为“一个”或“两个”,如下例所示。有没有办法让文本动态化?

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

1 个答案:

答案 0 :(得分:2)

我同意@Castaglia您可能会通过提供有关您要执行的操作的更多详细信息而获益。也就是说,我将简单回答所说的问题。

是的,可以动态计算对象的键。这适用于任何对象,而不仅仅是您传递给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) { ... });
}