Последовательное выполнение функций
by Artem
HTML
<div id="log"></div>
JavaScript
'use strict';
function myFunc1(resolve, reject) {
setTimeout(function() {
resolve();
}, 3000);
}
function myFunc2(resolve, reject) {
setTimeout(function() {
resolve();
}, 5000);
}
function myFunc3(resolve, reject) {
setTimeout(function() {
resolve();
}, 2000);
}
function log(text) {
let logElement = document.getElementById('log');
logElement.innerHTML += '<br />' + text;
}
function sequence(fns) {
let chain = Promise.resolve();
fns.forEach(function(fn) {
chain = chain.then(function() {
return new Promise(function(resolve, reject) {
log('started execution at: ' + new Date().toTimeString());
fn(resolve, reject);
}).then(function() {
log('stopped execution at: ' + new Date().toTimeString());
});
});
})
return chain;
}
sequence([myFunc1, myFunc2, myFunc3]);