Javascript 无法理解为什么外部承诺无法解决

Javascript 无法理解为什么外部承诺无法解决,javascript,promise,Javascript,Promise,我是Javascript奇怪工作方式的初学者,我无法理解单线程设计和承诺是如何工作的 以下面的代码为例: 函数a(){ 返回新承诺((解决、拒绝)=>{ var inn=新承诺((解决、拒绝)=>{ setTimeout(()=>拒绝('Error'),0); }).catch((msg)=>console.log(msg)); 返回酒店; }); } a().then((msg)=>console.log('then')您必须在函数a中解析而不是返回它,才能使承诺链继续不中断。在另一个新承诺

我是Javascript奇怪工作方式的初学者,我无法理解单线程设计和承诺是如何工作的

以下面的代码为例:

函数a(){
返回新承诺((解决、拒绝)=>{
var inn=新承诺((解决、拒绝)=>{
setTimeout(()=>拒绝('Error'),0);
}).catch((msg)=>console.log(msg));
返回酒店;
});
}

a().then((msg)=>console.log('then')
您必须在函数
a
解析
而不是
返回
它,才能使承诺链继续不中断。

在另一个
新承诺中使用
新承诺
是一种反模式,您在这里的体验就是其中一个原因

您不调用外部
新承诺的
解决
拒绝
返回inn
无效,因为外部
新承诺
仅通过调用
解析
拒绝
或抛出的错误进行解析或拒绝,并且这两种情况都没有发生

它应该是这样的:

函数a(){
返回新承诺((解决、拒绝)=>{
setTimeout(()=>拒绝('Error'),0);
}).catch((msg)=>console.log(msg));
}

a().then((msg)=>console.log('then'),因为第一个承诺未得到解决/拒绝。检查以下内容。我刚把
returninn
改成
resolve(inn)

函数a(){
返回新承诺((解决、拒绝)=>{
var inn=新承诺((解决、拒绝)=>{
setTimeout(()=>拒绝('Error'),0);
}).catch((msg)=>console.log(msg));
解决(客栈);
});
}

a().then((msg)=>console.log('then')
你能解释一下为什么它是反模式吗(如果可能的话,举个例子)?@AdityaBhave为什么要在承诺中使用承诺?扼杀承诺链的目的。嗯。。。有道理。。。我想不出合适的用例。@AdityaBhave
我想不出合适的用例。
绝对没有用例。您可能提出的每个用例都可以从
newpromise((…)=>{newpromise((…)=>{…}})转换为
newpromise((…)=>{…})。然后((…)=>newpromise((…)=>{…}))
如果没有,那么它的局部会以某种方式被破坏。@t.niese我正在探索这个嵌套模式,因为我想了解承诺行为。从承诺构造函数返回的任何内容都将被忽略。这种模式没有任何好处。@Roamer-1888是的,但我这样做是为了更好地理解Javascript事件循环。是的,我知道了,现在您了解得更多了:-)