Непримитивы передаются ссылкой - любую переменную, представляющую объект, можно представить как ссылку на область памяти .Так, в testFN
:
function testFN(blob, array, iter){
var newBlob = blob;
newBlob.constant = blob.constant+array.num
newBlob
указывает на то же место в памяти, что и параметр blob
, поэтому при изменении newBlob.constant
вы также изменяете исходный blob.constant
(так как они один и тот же объект).Вы можете исправить это, назначив true копию blob
для newBlob
:
function testFN(blob, array, iter){
var newBlob = JSON.parse(JSON.stringify(blob));
newBlob.constant = blob.constant + array.num;
console.log(newBlob);
return newBlob;
}
var blob = {"constant":"x"};
var arr = { key1:{num: "1"}, key2:{num: "2"}, key3:{num: "3"}};
var fnArr = [];
Object.keys(arr).forEach(function(key, i) {
fnArr.push(testFN(blob, arr[key], i));
});
Promise.all(fnArr)
.then(function(success){
console.log(success);
})
.catch(function(error){
console.log(error);
})
Это не имеет ничего общего с Promise.all
.Все равно этот код не является асинхронным.