asynchronous模块.map的奇怪行为

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采用了相同的参数,它将工作。 我已经解决了,但我想知道我在这里失踪。

这是行不通的,因为Account.upsert方法使用this值,而JavaScript有dynamic的this

你可以尝试明确地绑定到这个值:

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