Вам необходимо принять концепцию асинхронного выполнения и систем, управляемых событиями. Написанное вами приложение не выполняется в том порядке, в котором оно написано.
Обратный вызов on('message',....)
будет выполнен только тогда, когда сообщение доставлено клиенту. Эта функция также не возвращает никаких значений (на самом деле она не вызывается никаким вашим кодом, она вызывается базовым клиентским кодом MQTT), поэтому она не будет «возвращать» значение success
.
Если вы хотите, чтобы приложение отключилось после получения первого сообщения, проще всего переместить код, который отключает клиент MQTT и шлюз Fabri c, внутрь колбэка. например,
client.on("message", (topic, message) =>{
var rfidPayload = JSON.parse(message.toString());
var carKeyIn = rfidPayload.carKey;
var renterIDIn = rfidPayload.renterID;
var timestampIn = rfidPayload.timestamp;
console.log(rfidPayload);
contract.submitTransaction('openCar', carKeyIn, renterIDIn, timestampIn);
gateway.disconnect();
client.end();
});
РЕДАКТИРОВАТЬ: Глядя на do c, кажется, что submitTransaction()
помечен как функция async
, поэтому вы должны иметь возможность использовать await
блокировать до завершения
...
console.log(rfidPayload);
await contract.submitTransaction('openCar', carKeyIn, renterIDIn, timestampIn);
gateway.disconnect();
client.end();
});