Это приложение выполняет свою работу и затем не завершает работу, пока я не завершу работу вручную, например, Ctrl+C
.Что приводит к тому, что приложение не закрывается?
let client = require('../client');
(async function basicFunctionCheck() {
try {
const connection = await qt.createConnection('ws://127.0.0.1', '8080', {
timeout: 120000,
logger: function() {
prefix = "LOGGER: ";
console.log.call(null, prefix, ...arguments)
}
});
const application = client.createApplication(connection);
const devices = await application.devices();
if (devices.type === 'response' && devices.payload.devices.length) {
const device = client.createDevice(connection, devices.payload.devices[0]);
await device.calibrate();
await device.setMain(true);
await application.setAllMain(false);
}
connection.close();
return;
} catch (error) {
console.dir(error);
}
})();
EDIT
Кажется, что ожидание не работает, как я ожидал.Все они исполняются немедленно.По крайней мере, я получаю закрытие соединения немедленно.Тем не менее, обещания отклоняются через 2 минуты.
Вот еще код **
let WebSocket = require('ws');
function createConnection(host, port, userOptions) {
const defaultOptions = { timeout: 60000 };
const options = { ...defaultOptions, ... userOptions};
const {
logger,
timeout
} = options;
let latestTransactionId = 0;
let commandResolvers = new Map();
const socket = new WebSocket(`${host}:${port}`);
function newTransactionId() {
latestTransactionId += 1;
return latestTransactionId.toString();
}
function close() {
if (logger) logger('Closing connection...');
socket.terminate();
}
function request(body) {
return new Promise(function(resolve, reject) {
const transactionId = newTransactionId();
commandResolvers.set(transactionId, resolve);
const requestMessage = JSON.stringify({
...body,
trans_id: transactionId
});
if (logger) logger(requestMessage);
socket.send(requestMessage);
setTimeout(function () {
const timeoutMessage = 'Connection timed out...';
if (logger) logger(timeoutMessage);
reject(Error(timeoutMessage));
}, timeout);
});
}
return new Promise(function(resolve, reject) {
socket.onopen = function () {
socket.onmessage = function(event) {
const data = JSON.parse(event.data);
if (logger) logger(data);
const transactionId = data.trans_id;
const commandResolver = commandResolvers.get(transactionId)
commandResolver(data);
};
connection = {
request,
close
}
resolve(connection);
};
setTimeout(function () {
const timeoutMessage = 'Connection timed out...';
if (logger) logger(timeoutMessage);
reject(Error(timeoutMessage));
}, timeout);
});
}
function createApplication(connection) {
function devices() {
return connection.request({
type: 'request',
cmd: 'devices',
});
}
}