javascript
  • json
  • node.js
  • 2016-01-13 28 views 1 likes 
    1

    我得到了這個錯誤,「ReferenceError:steamMSG未定義」,即使我正在給steamMSG分配一個值,但得到一個錯誤(ReferenceError:steamMSG未定義)。我非常困惑,因爲當我在控制檯中登錄它時,它表現出它的價值。即使我將它賦值爲

    代碼:

    if (command === "hex.steam") { 
         var url = 'https://api.steampowered.com/ISteamUser/ResolveVanityURL/v1/?key='+steamKey+'&format=json&vanityurl='+arguements; 
         request(url, function (error, response, body) { 
          if (!error && response.statusCode == 200) { 
           var data = JSON.parse(body); 
          } else { 
           console.log("Got an error: ", error, ", status code: ", data.statusCode); 
          } 
          var steamMSG = data.response.steamid; 
          console.log(steamMSG); 
         }); 
         bot.sendMessage({ 
          to: channelID, 
          message: steamMSG 
         }); 
        } 
    

    的錯誤是在這條線:

    message: steamMSG 
    

    回答

    0

    這是因爲該行var steamMSG = data.response.steamid;是異步函數,bot.sendMessage()定義之前被調用。

    最簡單的解決辦法是堅持bot.sendMessage()裏面的函數:

    request(url, function (error, response, body) { 
          if (!error && response.statusCode == 200) { 
           var data = JSON.parse(body); 
          } else { 
           console.log("Got an error: ", error, ", status code: ", data.statusCode); 
          } 
          var steamMSG = data.response.steamid; 
          console.log(steamMSG); 
    
          bot.sendMessage({ 
          to: channelID, 
          message: steamMSG 
         }); 
    }); 
    

    理想的解決方案是使用的承諾。

    0

    您需要將bot.sendMessage調用放入請求的回調中。

    由於「請求」需要時間來提出請求,因此它會在完成時進行回調。這意味着bot.sendMessage實際上在請求完成之前被調用,所以steamMSG還沒有被定義。

    相關問題