19

async/await非同期タスクを処理するための最良のアプローチを提供し、コードをよりクリーンで読みやすいものにする ES7 機能 の使用を開始しました。

ただし、非同期関数によって作成された Promise へのアクセスは提供されないため、非同期関数で非同期要求を行う場合は、それを約束し、それを待ってから結果を返す必要があります。私はこれを意味します:

async function doStuff() {
    //stuff...
    var value = await new Promise(function(resolve) {
        $.get('http://some/url/...', function(result) {
            // stuff...
            resolve(result);
        });
    });
    return value;
}

関数によって作成された Promise へのポインターを見つけて、コードが次のようになるとしたらどうでしょうか。

async function doStuff() {
    //stuff...
    var p = arguments.callee.promise;
    $.get('http://some/url/...', function(result) {
        // stuff...
        p.resolve(result);
    });
}

あるいは:

async function doStuff() {
    //stuff...
    $.get('http://some/url/...', function(result) {
        // stuff...
        async.resolve(result);
    });
}

このようにして、Promises API に直接アクセスする必要がないため、コードはタスクに完全に集中することができます。

4

3 に答える 3