Обычно пользователь пытается что-то сделать до того, как завершится предыдущее продолжительное действие.Это может привести к нескольким действиям, стремящимся изменить состояние приложения.
Одно простое решение - отменить все действия, кроме последнего.
У него есть имя?
Наиболее близким вопросом, который я мог найти, был вопрос об отмене предыдущего действия, когда новое действие происходит , но и автор, и ответы говорят только о реализации.
redux-saga имеет takeLatest (упомянутый в вопросе выше), который делает более или менее то же самое, но работает над сагой.Имя «takeLatest», по-видимому, нигде не встречается и не ссылается ни на что.
Пример реализации:
class AsyncActionSlot {
// Cancellable promises used only to make this example simpler.
private _promise: BluebirdPromise<string> | null = null;
// Can be useful to check if the last process has
// already finished running. Not used anywhere
// else in this example.
public get isBusy(): boolean {
return this._promise !== null;
}
public cancel(): void {
if (this._promise) {
this._promise.cancel();
this._promise = null;
}
}
public do(promise: Promise<string>, callback: (msg: string) => void): void {
this.cancel();
this._promise = Bluebird.resolve(promise);
this._promise.then((msg) => {
this._promise = null;
callback(msg);
});
}
}
Пример использования:
const slot = new AsyncActionSlot();
// will be cancelled, won't print `'hello'`
slot.do(fetchHello(), console.log);
// will print `'world'`
slot.do(fetchWorld(), console.log);