node.js - Dialogflow agent.add 不使用承诺
问题描述
我正在尝试从电子表格返回数据,代码工作正常,数据出现在日志中,但agent.add
没有按预期工作。
我需要让对话流响应并返回我从电子表格中获得的数据。
发生的情况是,在代码的一个位置,对话流agent.add
按预期工作,但它没有返回我从电子表格中获得的数据,请参阅此部分:
agent.add("status code inside: "+ myCode); // agent.add working, but myCode variable not showing the data which returned from spreadsheet, it only shows the original value "XmXm"
在代码的另一个位置,agent.add
不工作,即使我可以在日志中看到电子表格数据,(我尝试过有和没有return
之前agent.add
)看到这部分
return agent.add("status code outside:"+ value); // function agent.add whether or not I add return before it
请注意,我尝试了许多在 stackoverflow 中提供的解决方案,但我仍然无法修复它,下面是我的完整代码:
function sheetPromiseHandelerGet(orderNum){
const jwtClient = authSheet();
let getSheetPromise = new Promise((resolve, reject) => {
const mySpreadSheetId = 'SHEET_ID';
const sheetName = "SHEET_NAME";
let myCode = "XmXm"; // give myCode a string value for testing
let testFirst = 0;
sheets.spreadsheets.values.get(
{
auth: jwtClient,
spreadsheetId: mySpreadSheetId,
range: `${sheetName}!A:H`
},
(err, res) => {
if (err) {
console.error(err);
return;
}
const data = res.data.values;
let i = 0;
for (i = 0; i < data.length; i++) {
if (orderNum == data[i][0]){
myCode = `myCode: Order details: ${data[i][1]}`;
resolve(myCode);
}
}
}
);
agent.add("status code inside: "+ myCode); // agent.add working, but myCode variable not is "XmXm"
});
return getSheetPromise.then(function(value) {
console.log(value); // the value (which is the result comes from spreadsheet) appears correctly in the debugger,
return agent.add("status code outside:" value); // function agent.add whether or not I add return before it
});
}
function orderStatusHandel(agent){
const detailsNum = agent.parameters.detailsNum;
sheetPromiseHandelerGet(detailsNum);
}
function authSheet(){
//
}
我将非常感谢您的帮助!
解决方案
终于经过多次尝试,我找到了答案,这很简单,我想我需要return
在调用调用的 main 函数之前添加,sheetPromiseHandelerGet(detailsNum)
仅此而已sheetPromiseHandelerGet(orderNum)
因此,如果您查看问题中我的代码的结尾,而不是
function orderStatusHandel(agent){
const detailsNum = agent.parameters.detailsNum;
sheetPromiseHandelerGet(detailsNum); //return is missing
}
一定是
function orderStatusHandel(agent){
const detailsNum = agent.parameters.detailsNum;
return sheetPromiseHandelerGet(detailsNum); //return has been added
}
除此之外,最好进行其他更改:
resolve(myCode);
成为
resolve(agent.add(myCode));
我希望这可以帮助任何有同样问题的人
推荐阅读
- typescript - 在 TypeScript 中,如何计算出“this”的正确类型?
- postgresql - 带有“if”条件的案例表达式?
- regex - Oracle中的正则表达式仅过滤特定字符
- php - Mysqli 依靠 php “不能使用 mysqli_result 类型的对象作为数组”
- java - 任意数量的空格后跟一个或多个整数的正则表达式是什么?
- c++ - 错误:在“数据”中请求成员“大小”,它是非类类型“int [5]”
- recursion - Power Query M 从多维列表递归创建“平面”列表
- ios - 如何在 SpriteKit 的不同设备上使 SKSpriteNode 的速度相同?
- javascript - 加载时动画元素
- node.js - 从 mongoDB API Node Express 的 3 个集合中获取所有文档