2017-04-07 43 views
0

私は長い間Promisesを使用してきましたが、書かれたコードがどのように見えているかは嫌です。ですから、私は非同期/待つことが理にかなっています(理論的には)。Expressからasync/awaitへの変換

ただし、非同期関数内でのみawaitを使用できます。現在、それぞれのルートが機能している場合(export function createLike(req, res, next))、そのルートはasync functionになりますか?私がそれをするかどうか確認する必要がありますか?もしそうすれば、奇妙なことが起こるでしょうか? (その場合は)私はそうのように、その中に呼ばasync functionとの正常な機能としての機能を保つことができる:

export function createLike(req, res, next) { 
    doStuff() // does this need to be "await doStuff()" if it's the only actionable call in the parent function? 

    async function doStuff() { 
     // do asynchronous stuff via async/await 
     res.status(200).send('success') 
    } 
} 
+0

'doStuff()はdoStuff非同期ですか? (非同期には見えません) - 元のコードが表示されていない場合は、どのように変換することができますか? –

+0

nodeJSのasyncを使うことができると思います。ウォーターフォール機能のチェック –

+0

@JaromandaX 'doStuff()'は非同期です。特定の非同期コードが重要であるとは思っていませんでした。ただ非同期である必要があります。 @ YoannPicquenotウォーターフォール機能が必要なのはなぜですか? async/awaitを使用すると、ウォーターフォールを必要とせずにさまざまな非同期関数を連鎖させることができます。それとも、もっと簡単なことですか?その場合には – Matt

答えて

0
export async function createLike(req, res, next) { 

Easy-peasy。関数をasyncとして宣言すると、Promiseを返すようなことはありません。あなたの全体の簡単な例解明

:それはsomeAsyncMethod()の応答を取得するまでこれが待機する

export async function createLike(req, res, next) { 
    // Don't bother putting inside a 'doStuff' if it's all you have. 
    // Get straight to the asyncing 
    const { something } = await someAsyncMethod(); 
    const { foo } = await fetch(`/get/this/${something}`).then((r) => r.json()); 
    console.log(foo); 
    res.status(200).send('success') 
} 

は、その応答を送信する前に、何かを取り出します。

+0

それはたくさんの意味があります。そして関数が約束を返すという事実は、その後のルート(例えば、エラー処理ルート)への影響に影響してはいけませんか? – Matt

+0

そうです - afaik expressは、その関数の戻り値を何にも使用しないので、約束を返すという事実は気づかれなくてはなりません。 btw私はこの社会病者が誰を説明していないのか、この質問の文字通りすべてをdownvotingしているかわからない... –

+0

素晴らしい。私はテストサーバーを通じて少しでもそれを実行し、何も起きないようにします。私はあなたがクリスのようにあなたを更新します、すべてがうまくいけば、あなたは再び私から聞いていません。何かがうまくいかない場合、私はあなたに笑を知らせます。そして、私もどちらか分かりません、私が推測する悪い一日... – Matt

0

使用koa 2+。 async/await用に作られています。

+0

プロジェクトはすでに特急で約束されています。 – Matt

+0

Expressは一般的に、特にこのコンテキストで時代遅れであるため、koaに変換することをお勧めします。 –

+0

これはかなり大きな仕事です。私は 'koa'にすべてを移動するのではなく、一度に1つのエンドポイントを' async/await'に簡単に変換できます。私は間違いなく次のプロジェクトのためにこれを念頭に置いています。 – Matt

関連する問題