Генератор Runner из книги YDK JS - PullRequest
0 голосов
/ 06 августа 2020

Я читал книгу Кайла и наткнулся на этот код (Generator Runner), и я действительно пытался понять его полностью, но запутался в нескольких частях,

сначала: почему он инициализирует генератор в текущий контекст, что именно мы получаем из этого, я имею в виду, не можем ли мы просто инициализировать его нормально?

второй: при первом возврате, почему мы используем Promise.resolve (). заменяется на IIFE ?. потому что он использует IIFE при втором возврате.

function run(gen) {
var args = [].slice.call( arguments, 1), it;

// initialize the generator in the current context
it = gen.apply( this, args );

// return a promise for the generator completing
return Promise.resolve()
    .then( function handleNext(value){
        // run to the next yielded value
        var next = it.next( value );

        return (function handleResult(next){
            // generator has completed running?
            if (next.done) {
                return next.value;
            }
            // otherwise keep going
            else {
                return Promise.resolve( next.value )
                    .then(
                        // resume the async loop on
                        // success, sending the resolved
                        // value back into the generator
                        handleNext,

                        // if `value` is a rejected
                        // promise, propagate error back
                        // into the generator for its own
                        // error handling
                        function handleErr(err) {
                            return Promise.resolve(
                                it.throw( err )
                            )
                            .then( handleResult );
                        }
                    );
            }
        })(next);
    } );
}

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...