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