Избегайте мутаций, вместо этого верните новое состояние.
Производить вывод, основываясь только на вводе, но не на глобальных / закрытых объектах (или, по крайней мере, не на изменяемых закрытых объектах).
Возможная реализация вашего примера на FP:
function process(item, oldData) {
const data = [...oldData];
data.push(item);
data.length > 2 && data.shift();
if(data[0] == 'ok') {
return {
result: data[1],
interimData: data
};
}
else {
return {
result: return something else,
interimData: data
};
}
}
function stream(item, data){
return process(item, data);
}
var data = [];
data = stream(item1 , data).interimData;
data = stream(item2 , data).interimData;
...
const finalResult = stream(item3 , data);