我遇到一种情况,我需要对异步方法的结果调用异步方法。
class Parent {
constructor(private child: Child) { }
private getChild(): Promise<Child> {
return Promise.resolve(this.child);
}
async getResult(): Promise<Child> {
return await this.getChild()
}
}
class Child {
getText(): Promise<string> {
return Promise.resolve('text');
}
}
let child = new Child();
let container = new Parent(child);
let printText = async () => {
await (await container.getResult()).getText();
}
printText();
有没有好的方法可以避免双重等待?我想我想做await container.getChild().getText();
。在 TypeScript 中创建 API 的正确方法是什么,该 API 允许我链接返回 Promise 的方法,然后通过单个等待等待结果?
编辑:澄清一下,这更多的是一个 API 设计问题。是否有更好的模式来完成我想做的事情(在异步方法返回的对象上调用异步方法)?即使这意味着做一些完全不同的事情?
有没有办法更好地设计我的 API,以便用户不需要双重等待?即使这意味着彻底改变我的示例的结构。
你一定不能让getResult
异步,它需要返回一个Result
立即实例化,以便可以对其调用进一步的方法。你的例子有点奇怪,因为getChild
实际上根本不需要异步。但让我们假设它是,并且做了一些重要的事情。
然后你可以写
class Parent {
private async getChild(): Promise<Child> {
… // whatever
}
getResult(): Result {
return new Result(this.getChild())
}
}
class Result {
constructor(p: Child) {
this.promise = p;
}
async getText(): Promise<string> {
return (await this.promise).getText();
}
}
现在你可以打电话parent.getResult().getText()
直接地。基本上,Result
充当代理包装器Child
完成这两个等待的类。也许在你的实际架构中你甚至可以避免this.promise
并一步完成子访问和文本访问。
然而,通常这是不值得的。只需让您的来电者await
每一步。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)