【发布时间】:2021-05-09 21:00:31
【问题描述】:
考虑以下代码sn-p:
class ClientWrapper {
private client: Client;
constructor() {
this.client = new Client();
}
async connect() : Promise<void> {
return this.client.connect();
}
async isConnected(): Promise<boolean> {
return this.client.isConnected();
}
};
class Client {
private data?: string;
private connected: boolean;
constructor() {
this.connected = false;
}
isConnected(): boolean {
return this.connected;
}
async connect() : Promise<void> {
this.data = 'data';
const res = await this.executeRequest();
this.connected = true;
}
async executeRequest() : Promise<string> {
return await Promise.resolve(this.data!);
}
};
let wrapper = new ClientWrapper();
(async () => {
await wrapper.connect();
console.log(await wrapper.isConnected());
})();
执行时,第 48 行 (console.log(await wrapper.isConnected())) 打印 true。
现在,我将ClientWrapper connect() 方法修改为:
async connect() : Promise<void> {
this.client.connect();
}
,删除return。
现在,第 48 行打印出false。
为什么Client 类的connected 属性不保留true 值?既然connect 方法返回Promise<void>,为什么return 语句很重要?
谢谢!
【问题讨论】:
-
"既然 connect 方法返回 Promise
,为什么 return 语句很重要? " - 因为return this.client.connect();和this.client.connect(); return Promise.resolve(undefined);之间存在巨大差异!请注意,Promise<void>与void不同。
标签: javascript typescript async-await promise es6-promise