异步模块.map的奇怪行为

时间:2014-03-01 01:18:45

标签: javascript node.js async.js

exports.fakeAccounts = function (Account, callback) {
  async.map([{
    username: 'Jehoon',
    provider: 'farcebook'
  }, {
    username: 'C3P0',
    provider: 'farcebook'
  }], function (opts, cb) {
    Account.upsert(opts, cb);
  }, callback);
};

工作正常,但

exports.fakeAccounts = function (Account, callback) {
  async.map([{
    username: 'Jehoon',
    provider: 'farcebook'
  }, {
    username: 'C3P0',
    provider: 'farcebook'
  }], Account.upsert, callback);
};

抛出错误,说帐户未定义。

我原以为,因为Account.upsert采用相同的参数,所以它会起作用。我现在已经解决了,但我想知道我在这里缺少什么。

1 个答案:

答案 0 :(得分:1)

这不起作用,因为Account.upsert方法使用this值和JavaScript has dynamic this

您可以尝试将其明确绑定到此值:

exports.fakeAccounts = function (Account, callback) {
  async.map([{
    username: 'Jehoon',
    provider: 'farcebook'
  }, {
    username: 'C3P0',
    provider: 'farcebook'
  }], Account.upsert.bind(Account), callback);
};