使用 promise 导出函数,等待响应
Export function with promise, wait for response
我在 then
语句中调用函数,该函数必须等待事件触发,但我的初始函数几乎立即 returning 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)
,等待它 return 一些文本,然后继续。但无论我如何构建它,receive
都会一直吹过它,dialogflow.handleIncoming(payload)
最终会变成 undefined
.
我试过在 df
上使用 promise 但没有成功,我不知道如何让 respondToUser
等待 handleIncoming
的完整响应。其他一切正常,所以我只包含相关代码。
这是使用 api.ai(对话流),但如果有帮助,则在 Firebase 的云函数中。感谢任何帮助!
您的接收函数没有等待 dialogflow.handleIncoming(payload)
完成。包含它的 then
函数没有 return 语句,因此它是 returning undefined
而不是 returning [=14= 的结果](这就是你想要的)。
let respondToUser = getUserId
.then((uid) => {
payload.uid = uid
return dialogflow.handleIncoming(payload)
})
.then((result) => {
console.log(result)
response.end()
})
下一个 then
语句将包含来自 diagflow.handleIncoming
的响应。
问题是 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()
}
我在 then
语句中调用函数,该函数必须等待事件触发,但我的初始函数几乎立即 returning 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)
,等待它 return 一些文本,然后继续。但无论我如何构建它,receive
都会一直吹过它,dialogflow.handleIncoming(payload)
最终会变成 undefined
.
我试过在 df
上使用 promise 但没有成功,我不知道如何让 respondToUser
等待 handleIncoming
的完整响应。其他一切正常,所以我只包含相关代码。
这是使用 api.ai(对话流),但如果有帮助,则在 Firebase 的云函数中。感谢任何帮助!
您的接收函数没有等待 dialogflow.handleIncoming(payload)
完成。包含它的 then
函数没有 return 语句,因此它是 returning undefined
而不是 returning [=14= 的结果](这就是你想要的)。
let respondToUser = getUserId
.then((uid) => {
payload.uid = uid
return dialogflow.handleIncoming(payload)
})
.then((result) => {
console.log(result)
response.end()
})
下一个 then
语句将包含来自 diagflow.handleIncoming
的响应。
问题是 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()
}