【发布时间】:2015-09-16 09:25:43
【问题描述】:
我正在尝试在 Promise 中克隆一个对象并迭代它的属性。
这似乎可行,您会得到一个对象数组,其中 page_num 从 2 增加到 44。
var allOptions = _.map(_.range(2, 45), function(page){
return { body: { action: 'read', page_num: page, page_size: 5 }}
})
Promise.map(allOptions, function(options){
return Promise.resolve(options).delay(3000)
}).then(console.log)
然而,上面的这个例子每次都是从头开始创建一个对象。
当我尝试像这样克隆现有对象时,我得到了下面描述的行为。
var masterOptions = { body: { action: 'read', page_num: 1, page_size: 5 }}
var allOptions = _.map(_.range(2, 45), function(page){
var options = _.clone(masterOptions)
options.body.page_num = page
return options
})
Promise.map(allOptions, function(options){
return Promise.resolve(options).delay(3000)
}).then(console.log)
或
Promise.map(_.range(2, 45), function(page){
var options = _.clone(masterOptions)
options.body.page_num = page
return Promise.resolve(options).delay(3000)
}).then(console.log)
这些似乎不起作用,options 对象似乎在每次迭代中迭代最后生成的对象{ body: { action: 'read', page_num: 44, page_size: 5 } }。
我如何克隆一个对象并迭代它的一个属性?
【问题讨论】:
-
我相信我通过切换到 lodash 的 cloneDeep 解决了这个问题。
-
这与 promises/bluebird 到底有什么关系?你对
console.log(allOptions)没有同样的行为吗?
标签: javascript object promise clone bluebird