【发布时间】:2017-10-03 08:42:17
【问题描述】:
我有一种情况,我需要对异步方法的结果调用异步方法。
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 的正确方法是什么,它允许我链接返回 Promise 的方法,然后通过一次 await 等待结果?
编辑:澄清一下,这更像是一个 API 设计问题。有没有更好的模式来做我想做的事情(在异步方法返回的对象上调用异步方法)?即使这意味着做一些完全不同的事情?
【问题讨论】:
-
要在不使用
await的情况下链接承诺,请使用.then。 -
请注意,您的匿名函数会丢弃文本而不做任何事情。我不确定你是否有意这样做。您可以用
return替换外部await,这可能会满足您的需求。 -
你在等待两件事,那么你为什么希望能够写一个等待呢?如果您使用的是 Promise,则还必须使用
then两次。你可以写const result = await container.getResult(); await result.getText();。 -
将外部的
await替换为return:-) -
await container.getChild().getText();语法在getChild返回承诺时是不可能的,因为承诺没有getText方法。故事结束。
标签: javascript asynchronous promise async-await typescript2.0