web-dev-qa-db-ja.com

Expressアプリ内でPromiseを使用するにはどうすればよいですか?

Promiseで実行されるクエリを実行するapp.get関数内でpromiseを使用しようとしています。しかし問題は、応答が約束を待たずに応答することです。

約束がapp.get内でエクスプレスアプリ内に存在できるようにコードをどのようにすべきか考えていますか?

13
samiq
app.get('/test', function (req, res) {
    db.getData()
    .then(function (data) {
        res.setHeader('Content-Type', 'text/plain');
        res.end(data);
    })
    .catch(function (e) {
        res.status(500, {
            error: e
        });
    });
});
24
Esailija

エクスプレスドキュメント からの回答は次のとおりです。

_app.get('/', function (req, res, next) {
  // do some sync stuff
  queryDb()
  .then(function (data) {
    // handle data
    return makeCsv(data)
  })
  .then(function (csv) {
    // handle csv
  })
  .catch(next)
})

app.use(function (err, req, res, next) {
  // handle error
})
_

これは主にnext.catch()に渡すことで注目に値します。これにより、一般的なエラー処理ルートがエラー処理ロジックをダウンストリームにカプセル化できます。

5
Poison Oak