由于某种原因无法使用变量查找对象属性

时间:2019-06-25 15:07:00

标签: javascript node.js

我知道这应该如何工作。如果我有一个变量x =“ property”和一个看起来像y = {property:“ value”}的对象,则y [x]应该返回“ value”。到目前为止,这对我仍然有效,但是我的代码中发生了一些奇怪的错误。这是我遇到的功能:

const { textToSpeech } = require("../text-to-speech/tts");
const data = require("../Data/Data").data;

const genericSendMessage = async (userMessage, assistant) => {
  try{
    let res = await assistant.message({
      workspace_id: process.env.TTS_WORKSPACE,
      input: {"text": userMessage}
    })
    res = await JSON.stringify(res["output"]["text"][0], null, 2)
    res = generateResponse(res);
    await textToSpeech(res);
    return res;
  }catch(err){
    console.log("error in genericSendMessage:\n",err)
  }
}

const generateResponse = (watsonCode) => {
  console.log("========================\nwatsonCode: ",watsonCode,"\ndata: ",data,"\ndata[watsonCode]: ",data[watsonCode])
  console.log(Object.values(data))
    return data[watsonCode][Math.floor(Math.random()*data[watsonCode].length())]
}

module.exports = genericSendMessage;

如果您查看此console.log:

console.log("========================\nwatsonCode: ",watsonCode,"\ndata: ",data,"\ndata[watsonCode]: ",data[watsonCode])

数据和watsonCode都可以很好地进行控制台,并且应该是应该的。 data是一个对象,而watsonCode是与该对象的属性相对应的字符串,但是data [watsonCode]每次都未定义。如果我将数据设为数组,将watsonCode设为数字(索引),则会发生相同的情况。我不知道这怎么可能。之前,如果我将watsonCode硬编码为console.log上方的Number(“ 1”),它也可以正常工作,但是如果获取watsonCode并获取“ 1”,则执行data [Number(watsonCode)]则未定义。我尝试在generateResponse函数中执行typeof(watsonCode),以查看它是否仍然是一个诺言,但不,它是一个字符串。

这是数组版本(缩短)的console.log外观:

========================
watsonCode:  "1" 
data:  [[...],[...],[...],...] //I removed the data here as it is somewhat sensitive but it's just a 2D array of strings
data[Number(watsonCode)]:  undefined
error in genericSendMessage:
 TypeError: Cannot read property 'length' of undefined

我的问题是这怎么可能,正在发生什么以及如何解决它,以便我可以正常引用对象属性?

0 个答案:

没有答案