gpt4 book ai didi

mysql - Node 回调返回 mysql 结果,但我无法通过 google 上的对话框操作向用户打印

转载 作者:行者123 更新时间:2023-11-29 15:44:22 24 4
gpt4 key购买 nike

我创建了一个意图,根据他作为参数提供的 ID 来获取用户信息。使用 mysql 模块我可以处理查询并获得结果。通过回调,我可以将结果发送到主函数,但一旦我传递给 conv.ask(),代理就会忽略。我究竟做错了什么?

这是我的第一个带有 Node 的脚本。我尝试在变量中声明 pesquisar_aluno() ,以便我可以在主函数中使用,但它返回 null。

const express = require('express');
const bodyParser = require('body-parser')
const mysql = require('mysql')
const {
dialogflow,
SignIn,
SimpleResponse
} = require('actions-on-google')


app.intent('pesquisar.alunos', (conv, params) => {

const aluno = params.aluno
conv.ask('Vamos pesquisar')

pesquisar_aluno(aluno,function(result){
var resposta = result
console.log(resposta) // returns the result
conv.ask(resposta) // ignores it
})

console.log(resposta) // returns undefined
})


function pesquisar_aluno(aluno,callback)
{
var connection = mysql.createConnection({
host : process.env.MYSQL_HOST,
user : process.env.MYSQL_USER,
password : process.env.MYSQL_PASS,
database : process.env.MYSQL_DB
})
connection.connect()

var query = `SELECT * FROM aluno WHERE id_aluno = "${aluno}"`

connection.query(query, function (error, results, fields)
{
if(error) throw error

var usuario = `RA =>${results[0].id_aluno} Nome => ${results[0].nome}`
if(callback) return callback(usuario)
})
}

期望 conv.ask(resposta) 向用户打印结果,但它不打印任何内容

编辑:更改为 promise 。成功了!感谢 Nick Felker 和 Prisoner

app.intent('pesquisar.alunos', (conv, params) => {

const aluno = params.aluno
conv.ask('Vamos pesquisar')

let nome = pesquisar_aluno_promise(aluno).then(function(results) {
return results[0].nome
}).catch((err) => setImmediate(() => { throw err; }))

return nome.then(function(result){
conv.ask(result)
})
})

async function pesquisar_aluno_promise(aluno)
{
return new Promise(function (resolve,reject) {
var connection = mysql.createConnection({
host : process.env.MYSQL_HOST,
user : process.env.MYSQL_USER,
password : process.env.MYSQL_PASS,
database : process.env.MYSQL_DB
})
connection.connect()

var query = `SELECT * FROM aluno WHERE id_aluno = "${aluno}"`
connection.query(query, function (error, results, fields)
{
if (error) {
return reject(error)
}
resolve(results)
})
})
}

最佳答案

正如 Nick 在评论中建议的那样,在进行异步操作时需要使用 Promises。

但是,此外,您需要从 Intent Handler 返回该 Promise,以便 Intent Dispatcher 知道在继续之前要等待结果。

在您的情况下,这可以只添加return,所以它可能看起来像这样:

  return nome.then(function(result){
console.log(result) //works
conv.ask(result) //should work now
})

关于mysql - Node 回调返回 mysql 结果,但我无法通过 google 上的对话框操作向用户打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57232623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com