gpt4 book ai didi

javascript - 同步调用 JavaScript 类方法

转载 作者:行者123 更新时间:2023-11-30 11:08:44 27 4
gpt4 key购买 nike

我正在用 JavaScript 构建一个包,它有两个函数:initsendData

class Client {
init() {
return axios.post(this.baseUrl).then((response) => {
this.token = response.data.token
})
}

sendData() {
return axios.post(this.baseUrl, {token: this.token})
}
}

init 方法需要在 sendData 方法之前调用,因为它会返回一个标记。有没有办法在调用sendData方法之前等待init方法被调用?

最佳答案

您是否需要 API 的使用者来执行此操作?

// within an async function
const client = new Client();
await client.init();
await client.sendDate();

// or anywhere just using promises
const client = new Client();
client.init().then(() => client.sendDate());

还是 API 本身?

// definition
class Client {
async init() {
const response = await axios.post(this.baseUrl);
this.token = response.data.token;
}

async sendData() {
await this.init(); // call init before sending data
return axios.post(this.baseUrl, {token: this.token})
}
}

// usage somewhere in an async function
const client = new Client();
client.sendDate() // calls init, then sends the data

如果 token 不变,是否可以删除冗余调用?

class Client {
async init() {
const response = await axios.post(this.baseUrl);
this.token = response.data.token;
}

async sendData() {
if (!this.token) { // now you'll only call init for missing token
await this.init();
}
return axios.post(this.baseUrl, {token: this.token})
}
}

// usage somewhere in an async function
const client = new Client();
await client.sendDate(); // calls init (only the first time), then sends the data

请注意,promise 返回函数本质上是异步的,因此无法以同步方式获取它们的结果。但是,我们可以使用 async/await 编写异步代码,使其在语法上看起来(几乎)与同步版本相同。

关于javascript - 同步调用 JavaScript 类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54640379/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com