6

非同期関数を含む次のノード アプリがあり、ES6 の約束を待っています。

async function test(id){
    try {
        let val = await Promise.resolve(id);
        console.log("val: " + val);
    } catch (error) {
        console.log("error: " + error);
    }
}

test(1);

結果 = 値: 未定義

期待される結果: 値: 1

これを gulp-babel を使用して ES5 にコンパイルします。

私はgulpタスク内に次のセットを持っています:

.pipe(babel({ optional: ["es7.asyncFunctions"] }))

npmがbabelをインストールした後、「babel / polyfill」でも必要です。

トランスパイルされたコード:

function test(id) {
var val;
return regeneratorRuntime.async(function test$(context$1$0) {
    while (1) switch (context$1$0.prev = context$1$0.next) {
        case 0:
            context$1$0.prev = 0;
            context$1$0.next = 3;
            return Promise.resolve(id);

        case 3:
            val = context$1$0.sent;

            console.log('val: ' + val);
            context$1$0.next = 10;
            break;

        case 7:
            context$1$0.prev = 7;
            context$1$0.t0 = context$1$0['catch'](0);

            console.log('error: ' + context$1$0.t0);

        case 10:
        case 'end':
            return context$1$0.stop();
    }
}, null, this, [[0, 7]]);
}

test(1);
4

2 に答える 2

1

Babel のバージョンより前のバージョンの Babel を使用しているよう5.5.0です。このバージョンより前は、サポートを開始した最初のバージョン(例のコード)regeneratorよりも前のバージョンで (Babel の依存関係) をインストールすることができました。0.8.28regeneratorawait Promise.resolve(value)

サポートはこのコミットでサイドに追加され、Babel はこのregeneratorコミットで少なくとも0.8.28リジェネレーターのリリースを要求するようにアップグレードされました。

于 2015-08-03T14:08:40.680 に答える
0

テスト機能を待つ必要があると思います。テスト関数はPromiseを待機するため、他のコンテキストで呼び出すときにテスト関数を待機すると、完了するまで待機するのに役立ちます。

于 2021-08-15T04:45:59.300 に答える