Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
!function(Обещание){
function функцияЛи(это){
typeof это === 'function'
}
var есть = Object.prototype.hasOwnProperty
, уОбещания = есть.bind(Обещание);
функцияЛи(Обещание)
&& 'бросить,разрешить,отклонить,все,гонка'.split(',').every(уОбещания)
&& (function(разрешить){
try {
new Обещание(function(ы){ разрешить = ы }).затем(null);
return функцияЛи(разрешить)
} catch(ошибка){}
})()
|| !function(){
// Распрягайте, Хлопцы, Коней...
}()
}(this.Обещание)
и удвоит объём кода приблизительно вдвое.
var promise = new Promise(function(resolve, reject) {
// здесь вытворяй что угодно, если хочешь асинхронно, потом…
if (/* ..если всё закончилось успехом */) {
resolve("Работает!");
}
else {
reject(Error("Сломалось"));
}
});
//здесь вытворяй что угодно, если хочешь асинхронно, потом…— если в том месте вызвать асинхронную функцию, а потом ваше условие, то это логически неправильно resolve должен вызываться в callbake асинхронной функции
Promise.race в помощь. Нужно отменить — вызывайте cancel.var cancel;
var promise = Promise.race([
new Promise((_, reject) => cancel = reject),
new Promise((resolve) => setTimeout(resolve, 1e4)),
]).then(
() => { console.log('done') },
() => { console.log('canceled') }
);
Promise.resolve(5) // возвращаем константу, отмена?
выполненные обещания не отменяются и не передают команду для отмены дальшеКак раз такое поведение реализовано по второй ссылке что я скинул.
Cancel this promise with the given reason. The cancellation will propagate to farthest cancellable ancestor promise which is still pending.А ещё можно создавать свой промис и пометить его как отменяемый.
Обещания JavaScript