3

orderedListOfFunctions次の node.js モジュールが与えられた場合、配列内の関数を呼び出して、それぞれにresponse変数を渡すにはどうすればよいでしょうか?

var async = require("async");
var one = require("./one.js");
var two = require("./two.js");

module.exports = function (options) {

var orderedListOfFunctions = [
    one,
    two
];

return function (request, response, next) {

    // This is where I'm a bit confused...
    async.series(orderedListOfFunctions, function (error, returns) {
        console.log(returns);
        next();
    });

};
4

3 に答える 3

3

bindこれを次のように使用できます。

module.exports = function (options) {
  return function (request, response, next) {
    var orderedListOfFunctions = [
      one.bind(this, response),
      two.bind(this, response)
    ];

    async.series(orderedListOfFunctions, function (error, resultsArray) {
      console.log(resultArray);
      next();
    });
};

この呼び出しは、 によって呼び出されたときにおよび関数に提供されるパラメータのリストのbind先頭に追加されます。responseonetwoasync.series

next()結果と処理もコールバック内に移動したことに注意してください。

于 2013-01-13T17:18:13.913 に答える
1

返された関数で orderredListOfFunctions を閉じずにこれを実行したいという OP の要望に沿って:

var async = require("async");
var one = require("./one.js");
var two = require("./two.js");

module.exports = function (options) {

  var orderedListOfFunctions = function (response) {return [
      one.bind(this, response),
      two.bind(this, response)
   ];};

   return function (request, response, next) {
      async.series(orderedListOfFunctions(response), function (error, returns) {
         console.log(returns);
         next();
      });
   };
};
于 2014-05-04T15:01:37.730 に答える
0

簡単な代替手段はapplyEachSeries -

applyEachSeries(tasks, args..., [callback])

例 -

function one(arg1, arg2, callback) {
    // Do something
    return callback();
}

function two(arg1, arg2, callback) {
    // Do something
    return callback();
}

async.applyEachSeries([one, two], 'argument 1', 'argument 2', function finalCallback(err) {
    // This will run after one and two
});
于 2016-02-10T07:46:37.097 に答える