如何防止bind在使用async.series时更改node.js中的原始对象
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进行深度克隆。
相关文章:
- 在索引.html和应用.js [node.js] 之间共享变量
- JS(node.js)而循环不起作用
- 如何使用 JS (Node.js) 防止 HTTP 查询中允许使用 UTF8 字符串
- Angular JS & Node Webkit Routing
- 当作为脚本运行时.js Node中“this”的上下文是什么
- JS/Node:- 使用 node.io 选择标记
- JavaScript 如何让节点在返回 node.js/Node-RED 之前等待
- 处理快速连续的函数调用 - Javascript / underscore.js / node.js
- 如何在一台服务器中运行不同的.js文件.js NODE JS中的文件
- JS node-mysql bools 表现得很奇怪
- Node.js+Node Webkit+基于Node串行端口的应用程序-这可能吗
- 如何在Express.js/Node.js中检查查询字符串是否有值
- Express.Js, Node.Js, MongoDB Questions
- 在JS/Node中,当多个人编辑相同的记录时,如何避免数据冲突?有图案吗
- 服务器端js(node.js)上的同步
- 将参数从jade发送到js/node
- angular.js+node.js/electron中的Promise;不起作用
- 是否有可能确定我的应用程序的aws实例使用js/node aws-sdk
- Image Magick模块抛出奇怪的错误(Express js Node js)
- 用JS (Node.js)读取文本文件'