Я пытаюсь запустить какое-то приложение Node.js
на heroku
, и я пытаюсь понять, почему не работает async / await.
Здесь я пытаюсь выполнить какой-то вызов на другом сервере Например, google.com и отобразить результат, однако console.log('x: ${x}')
никогда не выполняется, процесс зависает, а внутреннее обещание никогда не разрешается (выглядит так) и никогда не возвращает управление процессу. Кроме того,
const express = require('express')
const path = require('path')
const PORT = process.env.PORT || 5000
express()
.use(express.static(path.join(__dirname, 'public')))
.get('/th', async (req, res) => {
try {
const x = await callX();
console.log(`x: ${x}`)
return x;
} catch (err) {
console.error(err);
res.send("Error " + err);
}
}).listen(PORT, () => console.log(`Listening on ${ PORT }`))
callX = () => {
const data = JSON.stringify({
todo: 'Some data'
})
const options = {
hostname: 'google.com',
port: 443,
path: '/',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length
}
}
return new Promise(function(resolve, reject) {
const req = https.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`)
res.on('data', (d) => {
console.log(`d: ${d}`)
process.stdout.write(d);
resolve(d);
})
})
req.on('error', (error) => {
console.error(error);
reject(error);
})
req.write(data)
req.end()
})
}
Я что-то не так делаю или неправильно понимаю, как это должно работать?