Я только что пришел с любопытством обещаний. Если я откажусь непосредственно в цепочке, я могу поймать переменную позже.
Если я отклоняю переменную, я не могу поймать вообще. Обещание всегда считается выполненным в этом случае:
let proMISS = Promise.resolve();
proMISS.then(() => console.log('THEN 1'))
.then(() => Promise.reject())
.then(() => console.log('THEN 2'));
setTimeout(() => {
proMISS.catch(() => console.log('CATCH'));
}, 1000);
Это действительно работает:
let PROmiss = Promise.resolve()
.then(() => console.log('THEN 1'))
.then(() => Promise.reject())
.then(() => console.log('THEN 2'));
setTimeout(() => {
PROmiss.catch(() => console.log('CATCH'));
}, 1000);
Это не кажется детерминированным
3 ответа
Я только что нашел ответ, я думаю.
Обещание в переменной разрешено, но цепочка - нет. Поэтому, если вы поймаете переменную, она должна быть решена.
Вам нужно будет сохранить последнего члена цепочки каждый раз, когда вы добавляете участника.
let proMISS = Promise.resolve();
let promissTwo = proMISS.then(() => console.log('THEN 1'))
.then(() => Promise.reject())
.then(() => console.log('THEN 2'));
setTimeout(() => {
promissTwo.catch(() => console.log('CATCH'));
}, 1000);
proMISS
promissTwo
Ваш второй пример работает на основе той же концепции.
Вы по сути дела
let promise1 = Promise.resolve();
let promise2 = promise1.then(() => console.log('THEN 1'))
.then(() => Promise.reject())
.then(() => console.log('THEN 2'));
setTimeout(() => {
promise1.catch(() => console.log('CATCH'));
promise2.catch(() => console.log('CATCH'));
}, 1000);
Да, promise1
отличается от promise2
. Первый выполняется с undefined
, а второй отклоняется.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.