簡體   English   中英

使用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進行深層克隆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM