Mam kod JavaScript, którego minimal working example wygląda (mniej-więcej) tak:
const exampleInputList = [
input1,
input2,
input3
];
const run = function (inputList, processInput) {
const results = [];
for (const input of inputList) {
const result = processInput(input);
results.push(result);
}
return results;
}
const results = run(
exampleInputList,
(input) => {
const environment = initEnvironment();
while (true) {
const result = process(input, environment); // Nowy wynik w każdej pętli
if (isConditionFullfiled(result)) {
console.log(input.id, "Finished! Result:", result)
return true;
}
setTimeout(() => console.log(input.id, "Current step's result: ", result), 1000);
}
}
);
results.forEach(result => logToFile(result));
Wynik wykonania tego kodu (w konsoli) powinien być mniej-więcej taki:
0 Current step's result: // tutaj wynik kroku nr 1 dla wejścia 0
0 Current step's result: // tutaj wynik kroku nr 2 dla wejścia 0
0 Current step's result: // ...
0 Finished! Result: // tutaj wynik całości dla wejścia 0
1 Current step's result: // tutaj wynik kroku nr 1 dla wejścia 1
1 Current step's result: // tutaj wynik kroku nr 2 dla wejścia 1
...
Problemem jest to, żeby każda linijka była wyświetlana co sekundę – po to właśnie umieściłem wywołanie funkcji setTimeout
. Jak to osiągnąć – na przykład za pomocą promises?
PS. Dla uproszczenia zakładam w powyższym kodzie, że pętla while
zawsze się kończy.
UPDATE: Dla czytelności tego przykładu zmieniłem kod – teraz tablica wejściowa jest podawana explicite.
PS2. Dodałem kod odpowiedzialny za przetwarzanie tablicy results
– wcześniej go nie było, więc wyglądało, jakby nie była potrzebna (a póki co jest).
UPDATE2: Dodałem linijki w wyjściu, które lepiej pokazują, że wyjście powinno pokazać się dla wszystkich wejść po kolei.
undefined
?async
/await
powyższy kod nie wyglądałby schludniej?