Javascript 如何使用网络库从函数外部获取更新值
我是JS的新手。 我正在尝试构建API服务器,此服务器必须使用套接字从其他服务器接收数据。 目前我正在使用网络图书馆,我面临一个问题。 我应该得到数据来检查硬件是否工作,但我只得到 未定义(空数组) 我发现一些源代码使异步函数被调用,但仍然无法得到它 这是我的密码Javascript 如何使用网络库从函数外部获取更新值,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,我是JS的新手。 我正在尝试构建API服务器,此服务器必须使用套接字从其他服务器接收数据。 目前我正在使用网络图书馆,我面临一个问题。 我应该得到数据来检查硬件是否工作,但我只得到 未定义(空数组) 我发现一些源代码使异步函数被调用,但仍然无法得到它 这是我的密码 router.post("/Updated", async function(req, res, next) { ..... //connect to station server for locking var data = {
router.post("/Updated", async function(req, res, next) {
.....
//connect to station server for locking
var data = {
cmd: "lockStationQuery",
stationId: STATION_ID,
powerBankId: POWER_BANK_ID,
userId: USER_ID,
number: channelValue
};
var stringData = JSON.stringify(data);
var jsonData = JSON.parse(stringData);
var [client, recvData] = await getConnectionSocket(
USER_ID,
res,
merchant_uid,
amount
);
let successToWriteData = await writeData(client, stringData);
//Fail to send data to lock the Station
if (!successToWriteData) {
res.status(500).json({
RESULT: "FAIL",
REASON:
"error code 504"
});
res.end();
return;
}
console.log("received data", recvData); //this is empty array
jsonData = JSON.parse(recvData[0]);
这是我的getConnectionSocket函数
async function getConnectionSocket(USER_ID, res, merchant_uid, amount) {
//서버에 해당 포트로 접속
var client = "";
var recvData = [];
var local_port = "";
let status = {};
client = net.connect({ port: 8999, host: "localhost" }, function() {
console.log(
"connect log======================================================================"
);
console.log("connect success");
console.log("local = " + this.localAddress + ":" + this.localPort);
console.log("remote = " + this.remoteAddress + ":" + this.remotePort);
local_port = this.localPort;
this.setEncoding("utf8");
this.setTimeout(300000); // timeout : 10분
console.log("client setting Encoding:binary, timeout:300000");
console.log("client connect localport : " + local_port);
});
// 접속 종료 시 처리
client.on("close", function() {
console.log("client Socket Closed : " + " localport : " + local_port);
});
// 데이터 수신 후 처리
await client.on("data", function(data) {
console.log(
"data recv log======================================================================"
);
recvData.push(data);
console.log(recvData); //I want this data
console.log("data.length : " + data.length);
console.log("data recv : " + data);
let jsonData = JSON.parse(data);
if (jsonData.cmd === "removedPowerBank") {
if (jsonData.errorCode !== 0) {
//환불
console.log("환불 시작");
let cancel = cancelOrder(merchant_uid, USER_ID, res);
//여기서 환불 purchase db에 쓰기
} else {
console.log("PURCHASE 성공후 디비에 씀");
//구매 purchase db에 쓰기(getRentId에 썼음)
let purchased = writePurchaseDataInDB(
USER_ID,
res,
merchant_uid,
amount
);
console.log(purchased);
}
}
client.end();
});
client.on("end", function() {
console.log("client Socket End");
});
client.on("error", function(err) {
console.log("client Socket Error: " + JSON.stringify(err));
});
client.on("timeout", function() {
console.log("client Socket timeout: ");
});
client.on("drain", function() {
console.log("client Socket drain: ");
});
client.on("lookup", function() {
console.log("client Socket lookup: ");
});
return [client, recvData]; //recvData is always empty array
}
解决这个问题的最佳方法是什么?需要澄清以下几点 您是否在下面的日志中获得正确的值?或者你也没有定义它们
console.log("data.length : " + data.length);
console.log("data recv : " + data);
再加上这个
console.log("data type : " + typeof(data));