Javascript 无法理解为什么外部承诺无法解决
我是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中解析而不是返回它,才能使承诺链继续不中断。在另一个新承诺
函数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事件循环。是的,我知道了,现在您了解得更多了:-)