javascript承诺:承诺竞争中的setTimeout问题

javascript承诺:承诺竞争中的setTimeout问题,javascript,node.js,promise,Javascript,Node.js,Promise,以下代码输出(1)然后(3)whitch错误。。为什么? 以下代码旨在等待3秒钟并打印(3),然后再等待1秒钟,然后打印(1) 所以正确的顺序必须是(3)然后(1) 我想问题是wait()返回了一个新的承诺,但是如何解决这个问题呢 注意:对于链接,所有函数都必须返回“this” 类测试扩展了承诺{ 建造师(fn){ 超级(fn) 还这个 } 等待(秒){ 返回新测试(解析=> setTimeout(函数(){ 解析(秒) },秒*1000) ) } 完成(fn){ 返回super.then(f

以下代码输出(1)然后(3)whitch错误。。为什么?

以下代码旨在等待3秒钟并打印(3),然后再等待1秒钟,然后打印(1) 所以正确的顺序必须是(3)然后(1)

我想问题是wait()返回了一个新的承诺,但是如何解决这个问题呢 注意:对于链接,所有函数都必须返回“this”

类测试扩展了承诺{
建造师(fn){
超级(fn)
还这个
}
等待(秒){
返回新测试(解析=>
setTimeout(函数(){
解析(秒)
},秒*1000)
)
}
完成(fn){
返回super.then(fn)
}
}
p=新测试(r=>r())
p、 等待(3)/(2)必须在(1)之前
.done(x=>console.log(x))
.等等(1)

.done(x=>console.log(x))
您需要
等待
调用
。然后
对当前
测试
对象(即,
),并返回构建的
承诺
链:

类测试扩展了承诺{
建造师(fn){
超级(fn)
还这个
}
等待(秒){
返回这个。然后(()=>newtest(resolve=>{
setTimeout(函数(){
解析(秒)
},秒*1000);
}))
}
完成(fn){
返回super.then(fn)
}
}
console.log('start');
p=新测试(r=>r())
p、 等待(3)/(2)必须在(1)之前
.done(x=>console.log(x))
.等等(1)

.done(x=>console.log(x))
我想应该是
这个。然后
而不是
super。然后
,也不清楚
done
的目的是什么,因为它与
then
是一样的。工作了。。谢谢@CertainPerformance,你也给了我一个很好的教训,我必须使用。then()来等待链中的上一个函数。我有一个方法。then()用不同的签名调用super.then(),如果我在其中使用了这个。then(),它将导致无限循环,你有其他想法吗@estus@xxyy问题中没有显示这一点,因此这要视情况而定。您根本不需要扩展Promise,因为您的类不使用Promise API,而是使用自己的API。您可以在内部使用和使用承诺。类myPromise扩展了承诺{then(success,fail,otherArgument){if(otherArgument)doSomething()返回此值。then(success,fail)}