我正在尝试访问另一个函数中某个函数中设置的值,然后我想最后返回此值,我有一个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;
答案 0 :(得分:0)
在const returnBalance = setValue()
行中,调用带有0个参数的setValue。这将导致脚本失败,因为在未定义值的情况下无法执行value[0]
。
您不能使外部函数返回来自匿名内部回调的值。这是因为外部函数在调用回调之前返回。您需要执行以下操作之一:
将函数作为参数传递给您的外部函数,该函数表示回调触发后应发生的情况。您从回调中调用此函数并将值传递给它。这称为延续传递样式。
使用支持Promises的API,并让您的外部函数返回一个Promise,其中包含值而不是值本身。您可以使用承诺https://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_original
使用async / await以与同步代码非常相似的方式编写异步代码。这在后台也使用Promises,因此需要兼容的API或如上所述的Promisify。