Я предлагаю вам использовать подход, основанный на Promise
, а не стиль обратного вызова, который вы используете для requestToApi
. Если вы используете пакет request
, доступна версия на основе Promise
.
Альтернативным решением было бы создать promise
самостоятельно, например:
var requestToApiAsPromise = (options) => {
return new Promise((resolve, reject) => {
requestToApi(options, (error, response) => {
if (error) {
reject(error)
return
}
resolve(response.body)
})
})
}
Затем вы можете использовать этот метод в своем промежуточном программном обеспечении:
app.post("/checkUser", (req, res) => {
async function process() {
try {
var username = req.body.username
var password = req.body.password
var options = {...}
var response = await requestToApiAsPromise(options)
// response => response.body
// do whatever
res.end()
} catch (error) {
next(error)
}
}
process()
})
Этот метод использует async/await
, так что он позволяет вам писать свой код, как если бы вы делали вещи синхронно, что облегчает его создание асинхронные вызовы, заставляющие их «ждать», прежде чем будет выполнена следующая строка.