【发布时间】:2022-01-02 11:23:34
【问题描述】:
我有一个带有 save 方法的 typescript 类,我希望下一次调用 save 方法,只有在第一个完成后才发生。 想象以下情况:
count = 0;
async save() {
let x = this.count++;
console.log("start " + x);
await axios.post("***",{});
console.log("end " + x);
}
}
在这种情况下 - 当用户调用 save 时,无需等待 - 可以在第一个帖子完成之前调用第二个帖子 - 导致各种问题。
我想出的解决方案是:
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);
});
}
这是一个有效的解决方案,还是有更好的方法?
【问题讨论】:
-
stackoverflow.com/questions/50269671/… (我倾向于更多地使用 Observables - 因为能够取消排队的事件。不知道你的目标是什么)。 rxmarbles.com
-
这当然是有效的(就像代码一样),但我想这取决于你需要对这个过程进行多少控制,即一旦它们被调用,你就不能取消任何这些保存。正如另一位评论者所建议的那样,您可以使用 Observable 模式,甚至可以相当轻松地实现自己的承诺队列,以便每次保存都是一个离散事件,您可以与之交互,并在必要时在实际调用之前阻止。
-
所有这一切都可以通过 Promise 轻松实现,并且对于重试或取消(使用跨平台内置 AbortController)等简单的事情不需要 observables。
-
“导致各种问题”——比如什么?
标签: typescript async-await promise