【问题标题】:Returning value from a callback function in nodejs从nodejs中的回调函数返回值
【发布时间】:2021-06-01 21:21:10
【问题描述】:

我有这样的功能

function con(){
    database.connect(con, (err, con) => {
        conn.query("select * from person", (err, rs) => {
            console.log(rs)--->result
            return rs
        })
    }
}
var val = con()
console.log(val) // --> Undefined

经过大量搜索后发现我们无法从回调中返回值。完成此操作

function con(fn){
    database.connect(con, (err, con) => {
        conn.query("select * from person", (err, rs) => {
            console.log(rs) // --> result
            fn(rs)
        })
    }
}
var val = con(function(rs) {
    console.log(rs) // --> result
    return rs
})

console.log(val) // --> Again undefined

我想在另一个方法中使用 rs 并且应该在 graphql 的解析器中返回它 如何从上面返回值并在另一个函数中使用它

【问题讨论】:

  • 不,我想再次从 con 中返回值,因为 val 它是未定义的
  • 你不能,你需要使用回调中的值,或者使用链接中提到的承诺。 console.log(val) 将在你的 connect 回调函数被调用之前运行,所以知道 val/rs 何时可用的唯一方法是使用回调/Promise

标签: node.js callback graphql asynccallback


【解决方案1】:

所以,你需要清楚的理解——当你return时,你从当前函数返回。

在示例中:

var val = con(function(rs) {
    console.log(rs) // --> result
    return rs
})

你从匿名回调函数返回rs。但是con 没有返回任何东西。

我建议你使用async/await,据我所知你使用pgmysql

const connection = await database.connect(connectionOptions)
const result = await connection.query('select * from person')
console.log('Result:', result)

【讨论】:

  • 感谢您的回复,但我有一个回调到连接,成功连接后我需要再次查询结果进行查询有一个回调如何将其转换为异步等待
  • @GBulliSwamyReddy,如果您想检查connectionquery 上的错误——只需将它们放入try-catch 块中即可。而已。而且你的代码会比回调更扁平。
  • 示例:let connection; try { connection = await database.connect(); } catch (error) {...}
猜你喜欢
  • 1970-01-01
  • 2019-07-25
  • 2012-03-27
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
相关资源
最近更新 更多