2017-12-21 9 views
0

私は以下の経路機能を持っていますが、非同期関数が完了する前にこの関数をすべて終了すると、then()またはcatch() HTTP要求を適切に処理します。応答のために非同期関数でHTTPリクエストを待機させる方法

私の約束が完了するまで、HTTPリクエストを「ホールド/ストール」にするにはどうすればよいですか?

router.post('/', (req, res) => { 

    // validate username and password 
    validateCredentials(req) 
    .then((msg) => { 
     res.send(`Success!`); 
    }) 
    .catch((err) => { 
     res.status(500).send(err) 
    }) 

}) 
+2

このコードは問題ありません。要求を行っているコードに問題があるか、 'validateCredentials'実装で何か問題があります。そのコードを投稿してください。あなたは 'msg'を期待していますか? – Bergi

+0

'validateCredentials'コードも追加してください。あなたがその機能で行ったことをよりよく理解するために。 –

答えて

-1

ノードでES6を使用していると仮定すると、async/awaitを使用できます。これにより、リクエストが完了するまで待つことができます。

私は例としてfetchを使用しました。

router.post('/', async (req, res) => { 
    // validate username and password 
    let response = await validateCredentials(req) 
    if (response.code != 200) { 
    return res.status(500).send(err) 
    } 
    res.send(response.result) 
}) 

async function validateCredentials() { 
    let response = await fetch('http://example.com') 
    return { result: await response.json(), code: response.status } 
} 
+1

これはどのように役立っていますか? –

関連する問題