我正在尝试为对话流构建一个 webhook,但是当我运行代码匹配时无法访问代码中的某些变量未定义var findclass = (data, day, time) => { var match; data.forEach(entry => { if (entry.day === day && entry.time === time) { console.log("found"); match=entry;//this statement has no effect on above var match//instead it creates a new local variable } }); return match; }exports.tt = functions.https.onRequest((request, response) => { let qr = request.body.queryResult; let day = qr.parameters.day; let time = parseInt(qr.parameters.time.substring(11, 13)); let data = [ { day: "monday", time: 11, type: "lecture", batches: ["A", "B1", "B4", "B3", "B2"], subject: { name: "Basic Numerical Methods", name_short: "BNM", coursecode: "17B1NMA531", coursecode_short: "17MA531" }, class: "CS1", teachers: "SSH", semester: 5 }, { day: "monday", time: 15, type: "lecture", batches: ["A6", "A9"], subject: { name: "Environmental Science", name_short: "EVS", coursecode: "15B11GE301", coursecode_short: "GE301" }, class: "CS1", teachers: "EKT", semester: 5 }]var match = findclass(data, day, time); console.log(JSON.stringify(match)); if (match) { response.send({ fulfillmentText: `Yes, ${match.subject.name_short || match.subject.name}` }); } else { response.send({ fulfillmentText: `No class on ${day} ,${time} hr` }); }如果我删除 return match 语句,vscode 代码也显示 var match 未使用,这意味着它不考虑 match = entry ,但我不明白为什么?
3 回答
POPMUISE
TA贡献1765条经验 获得超5个赞
我不知道原因,但两个更改修复了代码
1) 在顶部添加“使用严格”。
2) 定义函数为
const findclass = () => {}
而不是 var
人到中年有点甜
TA贡献1895条经验 获得超7个赞
我的猜测是循环中实际上没有任何匹配,因此match
保持未定义。您是否确定循环中的某些内容实际上是匹配的?
此外,在 VSCode 中,如果您只是分配一个变量,而不是使用它(例如,在return
语句中),它会显示该变量未使用,这是意料之中的。
千万里不及你
TA贡献1784条经验 获得超9个赞
我的猜测是您的声明:
var match ...
正在吊装……见:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var
在您的代码中,您已声明:
var match ...
两次。我认为 findClass 函数体中的声明可能要更改为局部变量...
let match;
(这是一个猜测,将根据要求删除此答案,或者如果出现更好的答案)。
添加回答
举报
0/150
提交
取消