我正在尝试为我的苗条应用程序建立一个队列。基本上,我的服务器发送消息,它们需要按顺序执行,每个动作都等待最后一个完成。我目前使用的模型是这样的:我建立了一个商店来存储我的 actionQueue
import { writable, derived } from "svelte/store";
import type { Action } from "../types/Actions";
const initialState: Action[] = [];
let id = 0;
function createActionQueue() {
const { subscribe, update } = writable<Action[]>(initialState);
return {
subscribe,
add: (payload: Action) => {
update((queue) => [...queue, { id: id++, ...payload }]);
},
next: () => {
update((queue) => {
queue.shift();
return queue;
});
},
};
}
export const actionQueue = createActionQueue();
export const nextAction = derived(
actionQueue,
($actionQueue) => $actionQueue[0]
);
在需要监听 actionQueue 的组件上,我这样做
$: doNextAction($nextAction);
function doNextAction(nextAction: Action) {
if (nextAction) {
if (nextAction.type === "someType") {
doSomething();
actionQueue.next();
} else if (nextAction.type === "anotherType") {
doSomethingElse();
actionQueue.next();
}
}
}
但有时,actionQueue.next() 不会触发 $nextAction 的更新。我通过在随机组件上使用此命令验证了这一点:
$: console.log('nextAction',$nextAction);
我也尝试过直接使用 $actionQueue[0] ,但仍然不太奏效。我错过了什么?