Search code examples
javascriptgeneratorecmascript-6es6-promise

Is it possible to wrap promise inside generator?


I'm trying to create a promise-wrapper using generator so that I can do:

var asyncResult = PromiseWrapper( $.ajax( ... ) );

So far, I've been trying with:

function PromiseWrapper(promise){
    return function *wrapper(promise){
        promise.then(function(result){
            yield result;
        }, function(err){
            throw err;
        });
    }(promise).next().value
}

but this fails because yielding inside a normal is not allowed. Is there any work-around for this? Thank you :D

ps: I'm using babel to translate the code from es6 to es5


Solution

  • It is utterly impossible to wrap a promise in a generator that synchronously yields the promise's result, because promises are always asynchronous. There is no workaround for that, unless you throw mightier weapons like fibers at the asynchrony.