Изменение значения объекта перед нажатием на массив обещаний в 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.
Другие вопросы по тегам