Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果存储在变量中,承诺拒绝不会传递到catch_Javascript_Ecmascript 6_Promise_Es6 Promise - Fatal编程技术网

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);