isLoading
, а свойство некого объекта изменять: flags.isLoading = false;
const PERIOD = 5000;
let timeout;
const action = () => {
console.log('Action!');
// this.switchNextTab()
clearTimeout(timeout);
timeout = setTimeout(action, PERIOD);
};
const flags = {
_isLoading: false,
set isLoading(value) {
this._isLoading = value;
if (!value) {
// isLoading стал false
action();
}
},
get isLoading() {
return this._isLoading;
},
};
timeout = setTimeout(action, PERIOD);
// где-то в коде:
flags.isLoading = true;
// ...
flags.isLoading = false; // тут же выполнится action
const deferred = () => {
Promise.prototype.resolve = () => {}; // чтобы не было ошибок )
return Promise.resolve("web");
}
// проверка
deferred()
.then(function(res) {
console.log(200, res);
return "lab";
})
.then(function(res) {
console.log(100, res);
})
.resolve("web");
// реализация
function deferred() {
function Box() {
this.queue = [];
}
Box.prototype.then = function(func) {
this.queue.push(func);
return this;
}
Box.prototype.resolve = function(first_arg) {
let arg = first_arg;
while (this.queue.length)
arg = this.queue.shift().call(this, arg);
}
return new Box;
}
new Promise((resolve, reject)...
, но надо же его изнутри когда-нибудь таки отресолвить! Внутри промиса вызвать resolve(result)
resolve()
, либо сдуться reject()
.result = await my_promise;
прост дожидается, пока промис рванёт с каким-то результатом. function superCallback() {
console.log("Свершилось! Коллбэк сработал.");
}
document.addEventListener("keydown", superCallback);
// на этот момент мы объявили функцию и повесили слушатель события
// дальше всё, делать больше нечего, движок JS свободен
// но слушатель сидит, ждёт.
Наступает Promise.all([ P1, P2 ]);
– после выполнения обоих обещаний можно вызывать функцию.// псевдокод
var docA, docB;
Pa = asyncload("url-A"); // ф-я возвращает промис
Pb = asyncload("url-B");
Promise.all([ Pa, Pb ]).then( docA.b_is_ready() );
// метод объекта docA "b_is_ready" вызывает функцию в документе B
const delay = _ => new Promise(rs => setTimeout(rs, 3e3));
async function notSoFast(promise) {
result = await Promise.all([ promise, delay()]);
return result[0];
}
async function runPromisesInSequence(promises) {
for (let i=0; i<promises.length; i++) {
if(i === 0) {
console.timeEnd( await promises[0]);
} else {
console.timeEnd( await notSoFast(promises[i]));
}
}
}
function makePr(label, dur) {
return new Promise(rs => {
console.log('%s started', label);
console.time(label); // начало отсчёта
setTimeout(_ => {
console.log('%s timer completed', label);
rs(label);
}, dur);
});
}
runPromisesInSequence([
makePr('r1', 1000),
makePr('r2', 5000),
makePr('r3', 0000),
]);
/* Выводит:
r1 started
r2 started
r3 started
r3 timer completed
r1 timer completed
r1: 1005ms
r2 timer completed
r2: 5007ms
r3: 8009ms
*/