我正在尝试从电子表格返回数据,代码工作正常,数据出现在日志中,但 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(){
//
}
我将非常感谢您的帮助!
最佳答案
最后经过多次尝试,我找到了答案,很简单,我想在调用主函数sheetPromiseHandelerGet(detailsNum)
之前添加return
,该函数调用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));
希望可以帮助有同样问题的人
关于node.js - Dialogflow agent.add 无法与 Promise 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59125963/