【问题标题】:Gett "Cannot read property of 0" when trying to access an array point尝试访问数组点时获取“无法读取 0 的属性”
【发布时间】:2018-11-07 17:42:04
【问题描述】:

我试图在另一个函数中访问一个函数中设置的值,然后我想在最后返回这个值,我有一个 console.log 来显示该值,并且日志显示该值就好了,但是在尝试设置它时,我收到一条错误消息:TypeError: Cannot read property '0' of undefined

似乎当我尝试返回值时(我通过将函数设置为变量来执行此操作)显示没有结果的函数。不知道如何从我的 setValue 函数中显示结果,有什么想法吗? :) 我的快递代码:

function showBalance(cardNumber) {
  connection.query(
    "SELECT Balance from userCards WHERE CardNumber  = '" + cardNumber + "'",
    function(err, rows) {
      if (err) {
        throw err;
      } else {
        setValue(rows);
      }
    }
  );
  function setValue(value) {
    console.log('Balance object is:', value[0].Balance);
    const ownBalance = value[0].Balance;
    console.log('The user balance is: ', ownBalance);
    return ownBalance;
  }
  const returnBalance = setValue();
  return returnBalance;
}
module.exports = showBalance;

【问题讨论】:

  • 您在调用 setValue() 时没有在 return 语句之前传入任何值。代码无法访问value[0],因为未设置值。需要设置值吗?你能不能不只是return rows[0].Balance; setValue(rows); 目前在哪里?

标签: javascript express


【解决方案1】:

const returnBalance = setValue() 行中,您使用 0 个参数调用 setValue。这将导致脚本失败,因为当 value 未定义时,您无法执行 value[0]

你不能让你的外部函数返回一个来自匿名内部回调的值。这是因为外部函数在调用回调之前返回。您需要执行以下操作之一:

  • 将函数作为参数传递给外部函数,表示回调触发后应该发生的情况。您从回调中调用此函数并将值传递给它。这称为延续传递风格。

  • 使用支持 Promises 的 API,并让您的外部函数返回包含值而不是值本身的 Promise。您可以使用 promisify 使基于回调的 API 适应 Promise:https://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_original

  • 使用 async/await 以与同步代码非常相似的风格编写异步代码。这也在底层使用了 Promises,因此它需要兼容的 API 或如上所述的 Promisify。

【讨论】:

  • 如何设置值?我不能只返回父函数中的函数值,因为它超出了范围
  • 我看到了编辑,你的信息似乎很好我只是花了很多时间试图弄清楚如何按照你的建议去做。
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 2021-11-02
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
相关资源
最近更新 更多