Изменение значения объекта перед нажатием на массив обещаний в PouchDB/Benchmark.js
В настоящее время я тестирую время, необходимое для вставки нескольких различных объектов в PouchDB, либо вставляя их по одному, либо выполняю массовую вставку. Мой подход заключается в извлечении большого сгенерированного элемента JSON и изменении _id с помощью пользовательской функции внутри цикла, а затем помещении функции, которая выполнит вставку в массив обещаний, чтобы, наконец, вызвать Promise.all над массивом.
Тесты по своей сути асинхронны (требуется ключевое слово defer).
Код выглядит так (coffeescript):
benchmarkCreate: () ->
result = {}
Ember.$.getJSON('bigitem.json').then((doc) =>
@createUpdateTest 10, result, doc[0] # Takes the JSON only
)
createUpdateTest: (many, res, doc) ->
(@get 'benchSuite').add(new Benchmark("Create #{many} Items Bench",
'defer': true
fn: (deferred) =>
iterations = []
i = 0
while i < many
doc._id = @makeid()
console.log 'Out of the Promise array: ' + doc._id
iterations.push ((@get 'pouchService').createUpdateDoc doc)
i++
Promise.all(iterations).then((response) ->
deferred.resolve()
)
))
Предполагается, что pouchService успешно вставляет новые элементы с разными идентификаторами (управление ревизиями не требуется). У меня есть еще одна распечатка перед тем, как положить документ в PouchDB, и у меня есть вывод:
Out of the Promise array: z2sF0
Out of the Promise array: v2J3F
Out of the Promise array: MY2qX
Out of the Promise array: BkKiv
Out of the Promise array: DjcUK
Out of the Promise array: TIL6e
Out of the Promise array: xjz20
Out of the Promise array: oHAFf
Out of the Promise array: dWK6U
Out of the Promise array: 9KKRi
Inside the Promise Array: 9KKRi
Inside the Promise Array: 9KKRi
Inside the Promise Array: 9KKRi
... X 10
Мне нужно изменить id 10 раз, прежде чем вставлять в массив обещаний, но, похоже, он принимает только последнее значение, даже если оно печатает новое значение непосредственно перед нажатием на функцию.
1 ответ
Я просто решил свою проблему на тот случай, если кому-то будет интересно. При назначении нового идентификатора документу изменялась ссылка на объект, а не новый объект. Чтобы решить это:
docAux = Ember.copy doc
Object.assign docAux, { _id: @makeid() } # New id for each new item.