提问人:goastler 提问时间:10/11/2023 更新时间:10/11/2023 访问量:59
如何在javascript / typescript中等待异步超级函数?[关闭]
How to await an async super function in javascript/typescript? [closed]
问:
在打字稿中,假设我有以下两个类:
class X {
constructor() {
}
public async doSomething(): Promise<string> {
console.log('x')
return 'x'
}
}
class Y extends X {
constructor() {
super()
}
public override async doSomething(): Promise<string> {
console.log('y before')
await super.doSomething()
console.log('y after')
return 'y'
}
}
然后我运行以下命令:
const y = new Y()
y.doSomething()
我希望输出是:
y before
x
y after
但相反,它是:
y before
x
几乎就像没有等待任何东西一样。我一直在研究它,发现如果我在承诺最终解析并打印后添加一些代码,则进一步支持我的理论,即它没有正确等待。await super.doSomething()
y.doSomething()
y after
这是怎么回事?
答:
1赞
Konrad
10/11/2023
#1
似乎工作正常
class X {
constructor() {}
async doSomething() {
console.log('x')
return 'x'
}
}
class Y extends X {
constructor() {
super()
}
async doSomething() {
console.log('y before')
await super.doSomething()
console.log('y after')
return 'y'
}
}
const y = new Y
y.doSomething()
原始可能引发错误,因此没有输出doSomething
'y after'
class X {
constructor() {}
async doSomething() {
console.log('x')
throw 'e'
return 'x'
}
}
class Y extends X {
constructor() {
super()
}
async doSomething() {
console.log('y before')
await super.doSomething()
console.log('y after')
return 'y'
}
}
const y = new Y
y.doSomething()
评论
3赞
goastler
10/11/2023
正如评论中指出的,我的代码是演示该问题的玩具示例。在我的代码末尾,我有 ,结果证明这是问题的一部分。我错过了代码中的其他地方,这意味着直到完成才等待承诺,并且 nodejs 在完成承诺之前就已经到达了行。添加缺失解决了一切。所以@Konrad这里的答案是正确的,它确实有效,但是对于其他有这个问题的人来说,请搜索丢失的 s!process.exit(0)
await
process.exit(0)
await
await
评论
public async doSomething(): Promise<string> { return new Promise(resolve => { console.log('x') resolve('x'); }); }
await