gpt4 book ai didi

javascript - 带promise的导出函数,等待响应

转载 作者:行者123 更新时间:2023-12-03 03:10:01 25 4
gpt4 key购买 nike

我正在 then 语句中调用一个函数,该函数必须等待事件触发,但我的初始函数几乎立即返回 undefined:

// call.js
const dialogflow = require('./dialogflow')
module.exports = {
receive: functions.https.onRequest((request, response) => {
...
let respondToUser = getUserId
.then((uid) => {
payload.uid = uid
dialogflow.handleIncoming(payload).then((result) => {
console.log(result)
})
})
.then((result) => {
console.log(result)
response.end()
})
...
}
}

// dialogflow.js
module.exports = {
handleIncoming: (payload) => {
...
let df = dialogflow.textRequest(message.message, {
sessionId: payload.from
})
.on('response', (response) => {
return response.result.fulfillment.speech
})
.on('error', (error) => {
return 'That\'s an error on my end. Try again later!'
})
.end()
}
}

目标是从 call.js 调用 dialogflow.handleIncoming(payload),等待它返回一些文本,然后继续。但无论我如何构建它,receive 都会不断地遍历它,dialogflow.handleIncoming(payload) 最终会undefined

我尝试在 df 上使用 Promise,但没有成功,而且我不知道如何让 respondToUser 等待 的完整响应处理传入。其他一切都正常,因此我只包含相关代码。

这是使用 api.ai (dialogflow),但如果有帮助的话,可以在 Firebase 的云函数中使用。感谢任何帮助!

最佳答案

问题是 dialogflow.handleIncoming(payload) 不是异步结构的。试试这个:

// dialogflow.js
exports.handleIncoming = (payload) =>
new Promise((resolve, reject) => {
...
let df = dialogflow.textRequest(message.message, {
sessionId: payload.from
})
.on('response', (response) => {
resolve(response.result.fulfillment.speech)
})
.on('error', (error) => {
reject ('That\'s an error on my end. Try again later!')
})
.end()
}

关于javascript - 带promise的导出函数,等待响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46995297/

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