承诺全部,得到多余的结果

时间:2018-09-05 10:41:20

标签: javascript callback promise es6-promise

我有一个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 :(得分:0)

@mpm,首先非常感谢您的努力。

@HMR,谢谢您的提示。没有它,我会浪费几个小时。

我必须解决的问题是深度克隆。我使用了lodash cloneDeep函数来解决此问题。因此,在comment 1下方执行以下操作可以解决此问题。

resolve({ number, myObj: _.cloneDeep(myObj) });