Encomendas aguardando
- Posição 1volume-01Próxima a sair
- Posição 2volume-02
- Posição 3volume-03
Retira a primeira que ainda espera. A sequência registrada abaixo mostra a ordem de saída.
O que aconteceu?
Há três encomendas aguardando. A próxima a sair está destacada.
Ver explicação técnica e código desta passagem
A etapa usa Queue/FIFO ou Stack/LIFO para escolher a próxima posição. As duas armazenam volumes num Array.
export function startDelivery(state: DeliveryState): StudyStep<DeliveryState> {
if (state.processing !== null) {
return step(state, 'busy');
}
if (state.head >= state.entries.length) {
return step(state, 'empty');
}
const fifo = state.discipline === 'queue';
const parcel = state.entries[fifo ? state.head : state.entries.length - 1];
return step(
{
...state,
// FIFO não chama shift: avança o índice. O prefixo permanece até o reinício.
head: fifo ? state.head + 1 : state.head,
entries: fifo ? state.entries : state.entries.slice(0, -1),
processing: { ...parcel, attempts: parcel.attempts + 1 },
},
fifo ? 'startFifo' : 'startLifo',
{ label: parcel.label, attempt: parcel.attempts + 1 },
);
}Inspecionar os registros antes e depois
Estes registros mostram a simulação em cada momento. Rever uma passagem muda o estado observado; agir a partir dela substitui o caminho que vinha depois.
Estado anterior
{
"discipline": "queue",
"entries": [
{
"id": 1,
"label": "volume-01",
"attempts": 0
},
{
"id": 2,
"label": "volume-02",
"attempts": 0
},
{
"id": 3,
"label": "volume-03",
"attempts": 0
}
],
"head": 0,
"processing": null,
"delivered": [],
"deadLetters": [],
"nextId": 4
}Estado observado
{
"discipline": "queue",
"entries": [
{
"id": 1,
"label": "volume-01",
"attempts": 0
},
{
"id": 2,
"label": "volume-02",
"attempts": 0
},
{
"id": 3,
"label": "volume-03",
"attempts": 0
}
],
"head": 0,
"processing": null,
"delivered": [],
"deadLetters": [],
"nextId": 4
}
