As I suggest to you in the comments, you are better off using generators to get each value after each call.
function * f(input) {
for(const character of input) {
yield character;
}
}
test = f('hello world');
test.next(); // {value: "h", done: false}
test.next(); // {value: "e", done: false}
test.next(); // {value: "l", done: false}
test.next(); // {value: "l", done: false}
test.next(); // {value: "o", done: false}
test.next(); // {value: " ", done: false}
test.next(); // {value: "w", done: false}
test.next(); // {value: "o", done: false}
test.next(); // {value: "r", done: false}
test.next(); // {value: "l", done: false}
test.next(); // {value: "d", done: false}
test.next(); // {value: undefined, done: true}
, , . .
: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function