2017-07-30 4 views
4

ノード8にアップグレードしたばかりで、async/awaitでの作業を開始したいと考えています。私は解決に時間がかかり、私は実際にはより優雅な方法があるかどうか疑問に思っていたエラーに出くわしました。私はリファクタリングのすべての二次的なリファクタのために、この時点でリファクタリング機能全体を望んでいませんでした。promiseチェーンで待っています

async doSomething(stuff) { 
... 

    return functionThatReturnsPromise() 
    .then((a) => ...) 
    .then((b) => ...) 
    .then((c) => { 
     const user = await someService.createUser(stuff, c); 
     user.finishSetup(); 
    }); 
}; 

上記同様asyncになるように、すべてをリファクタリングすることなく、約束チェーンでawaitを使用することができるようにする方法はありますか?

+3

それは '.then(非同期(C)=> { 'で有効なすべてのことをすべきではない? –

+0

私は全体のチェーンを巻いていた...この前をいじったときに、私は逃したおそらく何だこれありがとう! –

+0

この単純な例では、私は待っている必要はありませんが、実際のコードでは、ユーザーに行う必要があるものがあります。 –

答えて

4

コールバックはasync関数として宣言されていません。 awaitPromiseは、asyncの機能のすぐ内側にあります。

async doSomething(stuff) { 
// ... 

    return functionThatReturnsPromise() 
    .then((a) => /* ... */) 
    .then((b) => /* ... */) 
    .then(async (c) => { 
     const user = await someService.createUser(stuff, c); 
     return user; 
    }); 
}; 

また、あなたがasync機能を活用している場合thenを使用するを必要としない必要があります。

async doSomething(stuff) { 
// ... 

    const a = await functionThatReturnsPromise(); 
    const b = // ... 
    const c = // ... 
    const user = await someService.createUser(stuff, c); 
    return user; 
}; 
+0

はい、私は@ジャロマンダXのおかげで、今理解しています。私はasync/awaitに関数全体に変換してもそれは問題ではないことを理解していますが、これはアプリケーションのコア関数であり、私が必要とする以上に触れ、それゆえ、約束を守り、私が必要とする新しい作品を追加する努力をしています。 –

+0

私はasync/await_に関数全体に変換しましたか? '非同期'関数の中から 'Promise'を'待つ 'ことができます。 –

+0

今すぐ機能全体が長い有望チェーンです。私はチェーン内の各リンクを「待っている」ように変換することを避けたかったのです。 –

関連する問題