У меня проблема с использованием Promise.all. Если я правильно понимаю - someArrayUpdate1 разрешает несколько обещаний для массива ( someArray1 ) асинхронно - поэтому, когда Promise.all (someArray1) срабатывает, рано или поздно в нем есть все данные. И то же самое происходит с someArrayUpdate2 - поэтому он начинает немедленно , создавая свои данные (someArray2).
Я думал, что .then () будет работать как тормоз, поэтому Promise.all (someArray2) начнет строить массив обещаний ПОСЛЕ Promise.all (someArray1) и благодаря этому TEST1 (mainArray) Состояние объекта будет включено.
Теперь проблема в том, что статус объекта TEST1 (mainArray) выключен. И я не знаю, как это изменить. Есть идеи?
<doctype>
<html>
<head>
<title>TEST</title>
</head>
<body>
<img src="img1.jpg" />
<img src="img2.jpg" />
<img src="img3.jpg" />
<script>
// ARRAYS and FUNCTIONS:
var mainArray = [{
TEST1 : {
status : ''
},
TEST2 : {
status : ''
},
TEST3 : {
status : ''
}
}];
var someArray1 = []; // for imgs
var someArray2 = []; // for objects
function someArray1Update(imgSrc, imgCounter) {
return new Promise(function (resolve, reject) {
setTimeout(function() {// - for marking asynchronous data flow
// this is where the problem is (lets assume that this code must be placed here) - we update second array here for Promise.all(someArray2) but nothing happen... status is OFF
someArray2.push(someArray2Update('TEST1', 'on'));
return resolve({counter : imgCounter, url : imgSrc});
}, 1000);
});
}
function someArray2Update(object, status) {
return new Promise(function(resolve, reject) {
return resolve({
[object] : {
status : status,
}
});
});
}
// CODE:
someArray2.push(someArray2Update('TEST2', 'on')); // working fine
var imgs = document.images || document.getElementsByTagName('img');
var imgsLength = imgs.length;
var imgSrc = '';
var imgsInfo = '';
if (imgsLength !== 0) {
for (var i = 0; i < imgsLength; i++) {
imgSrc = imgs[i].getAttribute('src');
var imgCounter = i + 1;
someArray1.push(someArray1Update(imgSrc, imgCounter));
console.log('Image ' + [i + 1] + ' - ' + imgSrc);
imgsInfo += 'Image ' + [i + 1] + ' - ' + imgSrc + '<br />';
}
}
else;
someArray2.push(someArray2Update('TEST3', 'on')); // working fine
Promise.all(someArray1).then(function(all) {
console.log('\n');
all.forEach(function(i) {
console.log('someArray1 - ok');
});
console.log('\n');
}).then(Promise.all(someArray2).then(function(array) {
array.forEach(function(i) {
mainArray[0] = Object.assign(mainArray[0], i);
});
console.log('\n=========================================================');
console.log(mainArray);
console.log('=========================================================\n');
}));
</script>
</body>
</html>