Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用网络库从函数外部获取更新值_Javascript_Asynchronous_Callback - Fatal编程技术网

Javascript 如何使用网络库从函数外部获取更新值

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 = {

我是JS的新手。 我正在尝试构建API服务器,此服务器必须使用套接字从其他服务器接收数据。 目前我正在使用网络图书馆,我面临一个问题。 我应该得到数据来检查硬件是否工作,但我只得到 未定义(空数组)

我发现一些源代码使异步函数被调用,但仍然无法得到它

这是我的密码

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));