我有以下测试代码:
var async = require('async');
var GROUP = 'testGroup';
var opts = {
someKey: 'hi',
};
test(opts);
function test(options) {
async.series([
doThis.bind(null, options),
doThat.bind(null, options),
], function(results) {
debugger;
});
}
function doThis(options, cb) {
options.someKey = [GROUP, options.someKey].join('.');
return cb();
}
function doThat(options, cb) {
debugger;
options.someKey = [GROUP, options.someKey].join('.');
return cb();
}
当我们点击debugger
中的doThat()
时,options.someKey
已经有someGROUP.hi
的值,所以当函数完成后我们最终得到options.someKey === 'someGROUP.someGroup.hi'
我们如何绑定原始对象不会改变?绑定是必要的,因为我们需要将选项传递给在async.series
内运行的函数。否则,我们可以调用函数并将对象作为参数传递。
答案 0 :(得分:0)
我不认为您将选项参数部分应用于 doThis() , doThat()< / em> 功能特别相关。
您将相同的javascript对象/文字作为参数传递给两个函数,然后改变该参数。
如果你不改变那个对象,那就不要了。找到一些返回操作结果的方法。 doThis() 和 doThat() 可以返回值而不是修改参数。在系列调用后,你可以在最后的回调中收集它们。
如果您只想保留opts的初始值,请在将opts传递给测试之前使用lodash或其他东西进行opts的深层克隆。