Tym razem poznajemy generatory przyjmujące wartości. Jest to dość ciekawa lekcja i wchodzimy już na zaawansowaną znajomość JS.

Generator przyjmujący wartości:

function* createFromPrompt(){
    let obj = {
    };

    obj.name = yield;
    obj.age = yield;

    yield obj;
    
}

Użycie:

let gen1 = createFromPrompt();

gen1.next();

gen1.next(prompt("Whats your name?"));

let out = gen1.next(prompt("Whats your age?"));

console.log(out.value);
//{name: "me", age: 18}

Teraz funkcja wrapująca:

function generateFromPrompt(gen){

    gen.next();

    let name;
    let age;

    do {
        name = prompt("Whats your name");
    } while (name.trim() === "");

    gen.next(name);

    do {
        age = prompt("Whats your age");
    } while(Number.isNaN(parseInt(age)));

    return gen.next(age);
    
}

let outObj = generateFromPrompt(gen1);
console.log(outObj);
//{name: "me", age: 18}