Обещаю всем, получая лишний результат - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть массив Promise. При передаче его на Promise.all он возвращает необычный ответ Хорошо, это минимальный пример того, чего я пытаюсь достичь.

const promiseChain = [1, 2, 3].map(number => new Promise(resolve, reject) => {
  // Calling an function with callback.
  getMyObj(number, (err, myObj) => {
     if (err) reject(err);
     else {
       // Comment 1
       // Here I'm able to log the desired result both number & myObj.
       resolve({ number, myObj });
     }
  })
});

Promise.all(promiseChain).then((results) => {
  results.forEach(result => {
     // Comment 2
     // Here number is correct for all objects. 
     // But, myObj is same for all the numbers.
  });
});

Проверьте комментарии. То, что я могу войти вместо комментариев, выглядит следующим образом:

Комментарий 1:

{ number: 1, myObj: {a: 1}}
{ number: 2, myObj: {b: 2}}
{ number: 3, myObj: {c: 3}}

Комментарий 2:

{ number: 1, myObj: {c: 3}}
{ number: 2, myObj: {c: 3}}
{ number: 3, myObj: {c: 3}}

Вот, что я делаю не так и как я могу это исправить?

1 Ответ

0 голосов
/ 05 сентября 2018

@ mpm , прежде всего большое спасибо за ваши усилия.

@ HMR , чувак, спасибо за подсказку. Без этого я бы потратил впустую несколько часов.

То, что я должен был сделать, чтобы исправить проблему, было глубоким клоном. Я использовал функцию lodash cloneDeep , чтобы решить эту проблему. Итак, прямо под comment 1 выполнение следующей исправленной проблемы.

resolve({ number, myObj: _.cloneDeep(myObj) });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...