7

私ができるように、ジェネレーターを使用して promise-wrapper を作成しようとしています:

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

これまでのところ、私は試してきました:

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

ただし、法線内での降伏は許可されていないため、これは失敗します。これに対する回避策はありますか?ありがとう:D

ps: コードを es6 から es5 に変換するために babel を使用しています

4

3 に答える 3

6

promise は常に非同期であるため、promise の結果を同期的に生成するジェネレータで promise をラップすることはまったく不可能です。繊維のような強力な武器を非同期で投げない限り、回避策はありません。

于 2015-04-28T08:14:07.553 に答える
3

このアプローチはhttp://davidwalsh.name/async-generatorsで機能しますか?

リンクからの変更例:

function wrap(promise) {
    promise.then(function(result){
        it.next( result );
    }, function(err){
        throw err;
    });
}

function *main() {
    var result1 = yield wrap( $.ajax( ... ) );
    var data = JSON.parse( result1 );
}

var it = main();
it.next(); // get it all started

おそらくその投稿全体を読む必要があります。これrunGeneratorはかなりきちんとしたアプローチです。

于 2015-04-28T07:49:57.807 に答える