class stateSetter {
cache = {};
timeout = 0;
set = <T>(
params: stateSetterParams
) => <K extends keyof T>(newState: {
[P in K]: T[P]
}): void => {
const {
_setState
} = params;
this.cache = {
...this.cache,
...newState
};
clearTimeout(this.timeout);
this.timeout = setTimeout(() => {
_setState((prevState: T) => ({
...prevState,
...this.cache
}));
this.cache = {};
});
};
}
В приведенном выше примере я использую setTimeout для объединения нескольких setState
с одной временной шкалы макроса.
setState({ ... });
setState({ ... });
Как указано выше.
Теперь, если я хочу использовать Promise ( Потому что это было бы более эффективно, чем setTimeout), я попытался:
class stateSetter {
cache = {};
promises = [];
set = <T>(
params: stateSetterParams
) => <K extends keyof T>(newState: {
[P in K]: T[P]
}): void => {
const {
_setState
} = params;
this.cache = {
...this.cache,
...newState
};
promises.push(Promise.resolve());
Promise.all(promises).then(() => {
_setState((prevState: T) => ({
...prevState,
...this.cache
}));
this.cache = {};
this.promises = [];
});
};
}
Это не работает. Почему? Как я могу изменить его?