Мои POST-запросы дважды вызывают одну и ту же функцию и отправляют данные, которые я получаю от этой функции, обратно клиенту.
Но я изо всех сил пытаюсь дождаться обоих вызовов функциичтобы закончить.
Я пытался использовать Обещания, но почему-то у меня это не получалось.
let socket_latest_data = new net.Socket();
let socket_optionmenu_data = new net.Socket();
app.post("/query_latest_data", function (req, res) {
let gauge_data = null;
let option_data = null;
let combined_data = {};
gauge_data = query_data(socket_latest_data, "d");
option_data = query_data(socket_optionmenu_data, "r");
Object.assign(combined_data, JSON.parse(gauge_data), JSON.parse(option_data));
res.end(combined_data);
});
function query_data(socket, char) {
socket.connect(2711, '192.168.1.173', function () {
socket.write(char);
});
socket.on('data', function (data) {
socket.removeAllListeners();
data = data.toString().replace(/[\[\]&]+|nan/g, '0').replace(/\s/g, '');
return data;
});
}
** ОБНОВЛЕНИЕ **
Решение - использовать метод Promise.all()
.Важно использовать .then(function()
часть, потому что иначе я просто получу [undefined, undefined]
Код
app.post("/query_latest_data", function (req, res) {
let combined_data = {};
Promise.all([query_data(socket_latest_data, "d"), query_data(socket_optionmenu_data, "r")]).then(function(data) {
Object.assign(combined_data, JSON.parse(data[0]), JSON.parse(data[1]));
console.log(combined_data);
res.end(JSON.stringify(combined_data));
});
});
function query_data(socket, char) {
return new Promise((res, rej) => {
socket.connect(2711, '192.168.1.173', function () {
socket.write(char);
});
socket.on('data', function (data) {
socket.removeAllListeners();
data = data.toString().replace(/[\[\]&]+|nan/g, '0').replace(/\s/g, '');
res(data);
});
})
}