[英]How to prevent bind from mutating original object in node.js when using async.series?
我有以下測試代碼:
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();
}
當我們在doThat()
debugger
時, options.someKey
已經具有值someGROUP.hi
,因此當函數完成時,我們最終得到options.someKey === 'someGROUP.someGroup.hi'
我們如何綁定以使原始對象不變? 綁定是必需的,因為我們需要將選項傳遞給在async.series
中運行的函數。 否則,我們可以調用函數並將對象作為參數傳遞。
我不認為您將部分options參數應用於doThis() , doThat()函數特別相關。
您要將相同的javascript對象/文字作為參數傳遞給兩個函數,然后對該參數進行突變。
如果您不突變該對象,則不要。 尋找其他返回操作結果的方法。 doThis()和doThat()可以返回值而不是修改參數。 您可以在調用該系列后在最終的回調中收集它們。
如果您只想保留opts的初始值,請在將其傳遞給測試之前,使用lodash或其他方法對opts進行深層克隆。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.