gpt4 book ai didi

typescript - typescript 中的顺序 promise

转载 作者:行者123 更新时间:2023-12-02 16:01:25 25 4
gpt4 key购买 nike

我有一个带有 save 方法的 typescript 类,我希望下一次调用 save 方法时只在第一次调用完成后发生。想象一下以下情况:

  count = 0;
async save() {
let x = this.count++;
console.log("start " + x);
await axios.post("***",{});
console.log("end " + x);
}
}

在这种情况下 - 当用户调用保存而不等待它时 - 可以在第一个帖子完成之前调用第二个帖子 - 导致各种问题。

我想出的解决方案是:

  lastSave = Promise.resolve();
count = 0;
async save() {
this.lastSave = this.lastSave.then(async () => {
let x = this.count++;
console.log("start " + x);
await axios.post("***",{});
console.log("end " + x);
});
}

这是一个有效的解决方案,还是有更好的方法?

最佳答案

这种 then 最后一个 promise 的模式是完全有效的。您当前拥有的唯一问题是错误处理。在您当前的代码中,如果一个请求失败,它将使所有 future 请求失败。

一个更完整的解决方案是这样的:

  lastSave = Promise.resolve();
count = 0;
async save() {
const savePromise = this.lastSave.then(async () => {
let x = this.count++;
console.log("start " + x);
await axios.post("***",{});
console.log("end " + x);
});
// wait but don't fail forever on errors
this.lastSave = savePromise.then(() => {}).catch(() => {});
// You also need to return the promise so callers can react
// to it. Note the lack of `.catch` here to not interfere with error handling
return await savePromise;
}

关于typescript - typescript 中的顺序 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70555548/

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