Javascript 如果存储在变量中,承诺拒绝不会传递到catch
我只是出于对承诺的好奇而来。 如果我在一个链中直接拒绝,我可以稍后捕获变量 如果我拒绝这个变量,我就根本无法捕获。在这种情况下,承诺始终被视为已解决:Javascript 如果存储在变量中,承诺拒绝不会传递到catch,javascript,ecmascript-6,promise,es6-promise,Javascript,Ecmascript 6,Promise,Es6 Promise,我只是出于对承诺的好奇而来。 如果我在一个链中直接拒绝,我可以稍后捕获变量 如果我拒绝这个变量,我就根本无法捕获。在这种情况下,承诺始终被视为已解决: let proMISS=Promise.resolve(); proMISS.then(()=>console.log('then 1')) .然后(()=>Promise.reject()) .then(()=>console.log('then 2')); 设置超时(()=>{ proMISS.catch(()=>console.log('
let proMISS=Promise.resolve();
proMISS.then(()=>console.log('then 1'))
.然后(()=>Promise.reject())
.then(()=>console.log('then 2'));
设置超时(()=>{
proMISS.catch(()=>console.log('catch'));
}, 1000);代码>我想我刚刚找到了答案
变量中的承诺已解析,但链未解析。
因此,如果捕捉到该变量,则必须对其进行解析
每次添加成员时,您都必须保存链的最后一个成员。我想我刚刚找到了答案
变量中的承诺已解析,但链未解析。
因此,如果捕捉到该变量,则必须对其进行解析
每次添加成员时,您都必须保存链的最后一个成员。您实际上是这样做的
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
不同。第一个是用未定义的来完成的,而第二个是被拒绝的。你实际上是在做
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
不同。第一个是用未定义的来实现的,而第二个是被拒绝的。
let proMISS=Promise.resolve();
让promiss2=proMISS.then(()=>console.log('then 1'))
.然后(()=>Promise.reject())
.then(()=>console.log('then 2'));
设置超时(()=>{
promissswo.catch(()=>console.log('catch');
}, 1000);代码>
let proMISS=Promise.resolve();
让promiss2=proMISS.then(()=>console.log('then 1'))
.然后(()=>Promise.reject())
.then(()=>console.log('then 2'));
设置超时(()=>{
promissswo.catch(()=>console.log('catch');
}, 1000);代码>