Код ниже работает, но он не обещан.
const express = require('express');
function listenAndReturnServer() {
app = express();
console.log('Before listen');
const server = app.listen(8001, function() {
console.log('Now listening');
});
console.log('After listen');
return server;
}
const server = listenAndReturnServer();
console.log('Doing some stuff');
console.log(typeof(server));
Он выводит следующее:
Before listen
After listen
Doing some stuff
object
Now listening
Проблема, которую я пытаюсь решить, состоит в том, что я хочу заменитьжурнал «Делать что-нибудь» с кодом, который зависит от работающего сервера, и вызванным обратным вызовом прослушивания (который выводит «Сейчас слушает»).Как вы можете видеть, «Делать некоторые вещи» записывается перед «Сейчас слушаю».Приходит util.promisify.
Я изменил вышеизложенное на следующее.
const express = require('express');
const util = require('util');
async function listenAndReturnServer() {
app = express();
console.log('Before listen');
const listenAsync = util.promisify(app.listen);
const server = await listenAsync(8001).then(() => {
console.log('Now listening');
});
console.log('After listen');
return server;
}
async function main() {
const server = await listenAndReturnServer();
console.log('Doing some stuff');
console.log(typeof(server));
}
main();
И на этот раз, по крайней мере, все войдет в правильном порядке.
Before listen
Now listening
After listen
undefined
Doing some stuff
Теперь появилась новая проблема: тип server
не определен.Мне действительно нужно, чтобы это был исходный объект Server, чтобы я мог закрыть сервер.
Кто-нибудь может определить, что здесь происходит, и как я могу получить желаемое поведение?