Skip to content Skip to sidebar Skip to footer

How To Yield Value Multiple Times From Function?

So what I am doing is, I have 2 files, One that contain a script which would generate a token and the second file handle that token. The problem is that the second script which wou

Solution 1:

If I understand your question correctly, You want to resolve promise multiple times, And It's nothing to do with modules...

But You understand something wrong about promise in JavaScript... You can't resolve a promise twice.

Generator

But you can generate new value from function, this type of function also known as generator, Where a function can reenter its context (Something like async/await) and yield result using yield keyword.

Usually a generator is used in for..of loop. It has next() method for yield next value from a generator...

Lets look an example:

constdelay = ms => newPromise(res =>setTimeout(res.bind(null, ms), ms));

asyncfunction* generator() {
    yield'yield result from generator!'for (let ms = 100; ms <= 300; ms += 100) {
        yield'delay: ' + awaitdelay(ms) + ' ms';
    }
    yielddelay(1000).then(() =>'you can also yield promise!');
}

asyncfunctionmain() {
    const gen = generator();
    console.log('1st', (await gen.next()).value);
    forawait (const ms of gen) {
        console.log(ms)
    }
}

main()

Note that * after function, So that we know that this function a generator, with async keyword this is Async Generator.

Generator is very useful. like: Generate value on demand, Pass data like pipe!, Can return endless value from function etc...

Callback

This old school method heavily used in node, Where you pass a callback function as argument.

Example:

constdelay = ms => newPromise(res =>setTimeout(res.bind(null, ms), ms));

asyncfunctioncallback(fn) {
    fn('yield result from callback!');
    for (let ms = 100; ms <= 300; ms += 100) {
        fn('delay: ' + awaitdelay(ms) + ' ms');
    }
    awaitdelay(1000);
    fn('yield asynchronously!');
}

callback(value =>console.log(value));

This approach create all sort of nutsy problem, like: created function scope, disaster of control flow, doesn't have break keyword etc... I don't recommend this method.

Post a Comment for "How To Yield Value Multiple Times From Function?"