簡體   English   中英

ReferenceError:變量未定義 - Node.js

[英]ReferenceError: variable is not define - Node.js

當我想運行下面的代碼時,oddsData 是未定義的。

getOdds = async(data) => {
    var receivedData = "";
    send({"Command":"GetMatchMarkets","Params":data});
    var message = JSON.stringify({"Command":"GetMatchMarkets","Params":data});
    var length = Buffer.byteLength(message),
    buffer = new Buffer(4 + Buffer.byteLength(message));
    buffer.writeUInt32LE(length, 0);
    buffer.write(message, 4);
    client.write(buffer);
    var bytesToReceive =  length;
    var oddsData = "";
    client.on('data', async(buf) =>  {
        function calc(){
            var offset = 0;
            if (bytesToReceive === 0) { 
                if(buf.length < 4){ return; } 
                bytesToReceive = buf.readUInt32LE(0);
                offset = 4;
            }
            var currentCommandBytes = Math.min(bytesToReceive, buf.length - offset);
            receivedData += buf.slice(offset, offset + currentCommandBytes);
            bytesToReceive -= currentCommandBytes;
            if (bytesToReceive === 0) { 
                bytesToReceive = 0;
                if (receivedData != ""){
                    oddsData += receivedData;
                }
                receivedData = "";
            }
            if (currentCommandBytes < buf.length - offset) {  
                calc(buf.slice(currentCommandBytes+offset))
            }
        }
        await calc();
    });
    console.log(oddsData);
}

返回 ReferenceError:未定義賠率數據。

當我想運行下面的代碼時,oddsData 是未定義的。

假設您在您的...其他代碼...中使用了 oddsData,可能錯誤是由於那些函數嵌套造成的,將函數聲明為變量,然后將其傳遞給您的代碼。

function test(){

var calc = function (){
     ...OTHER CODES....
     receivedData = "";
     return oddsdata
}

var asFun = async (buf) =>  {
        await calc();
    }
var oddsData = "";
    client.on('data', asFun);
    console.log(oddsData);
}

[更新以匹配問題代碼中的更改]

剝離所有不影響oddsData的代碼留下以下結構:

const getOdds = async () => {

  var oddsData = '';

  client.on('data', async () => {

    function calc () {
      oddsData += 'something';
    }

    await calc();
  });

  console.log(oddsData);
};

我看不到任何跡象表明oddsData應該是未定義的。

一個小測試程序來探索正在發生的事情:

 const getOdds = async() => { result.innerHTML += 'enter getOdds async()\n'; var oddsData = ""; client.addEventListener('data', async() => { result.innerHTML += `client.on data async() oddsData: '${oddsData}'\n`; function calc() { oddsData += "calc;". result:innerHTML += `calc() oddsData; '${oddsData}'\n`; } await calc(); }). result:innerHTML += `getOdds async() oddsData; '${oddsData}'\n`; }. window.onload = () => { result.innerHTML = 'window;onload calling getOdds()\n'; getOdds(); }
 <p id="client">This is client. <button onclick="emitData()">Emit 'data' to client</button> </p> <p>Results:</p> <pre id="result"></pre> <script> const client = document.getElementById('client'); const result = document.getElementById('result'); function emitData() { let event = new Event('data'); client.dispatchEvent(event); } </script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM