有很多类似的问题,但没有一个能解决我的查询。
这是我的代码:
if (commandFn === "/fetch") {
let userFetched: string;
returnText = `${commandFn} used with ${commandArg}`;
admin.database
.ref(`/Users/` + commandArg + "/userdata")
.once("value")
.then((snapshot) => {
userFetched = snapshot.val().userdata;
});
return res.status(200).send({
method: "sendMessage",
chat_id,
text: `${returnText} /n ${userFetched}`,
});
}
为什么说变量没有赋值?在其他不需要使用admin.database功能的函数中,我只是在if块中添加了return语句。
在我的代码中有很多if-else语句,它们更改了要返回的文本,但出现了相同的错误。因此,我必须在每个if-else块中始终添加return语句。
但当我使用admin.database功能时,我无法做到这一点。我再次看到了其他类似的问题,但这些问题并没有回答我的问题。
这是另一个面临同样问题的代码块:
let numberOfWords: number
for (let index = 1 ; index <= userCommandSlicedLength; index++) {
let lastChar: string = ''
let currentChar: string = ''
currentChar = userCommandSliced.charAt(index)
lastChar = userCommandSliced.charAt(index-1)
if (currentChar === " " && lastChar !== " ") {
numberOfWords = numberOfWords + 1
}
else if (currentChar === " " && lastChar === " ") { // This is a test String.
numberOfWords = numberOfWords + 0
}
}
const finalNumberOfWords: number = numberOfWords
console.log(`Number of words final are = ${finalNumberOfWords}`)
第二个代码的问题:
src/index.ts:88:25 - error TS2454: Variable 'numberOfWords' is used before being assigned.
88 numberOfWords = numberOfWords + 1
~~~~~~~~~~~~~
src/index.ts:91:24 - error TS2454: Variable 'numberOfWords' is used before being assigned.
91 numberOfWords = numberOfWords + 0
~~~~~~~~~~~~~
src/index.ts:95:40 - error TS2454: Variable 'numberOfWords' is used before being assigned.
95 const finalNumberOfWords: number = numberOfWords
必须用值初始化,然后才能添加值
userFetched
被声明为字符串,我们不能在那里添加对象,将其初始化为对象。
和
numberOfWords
应该用0初始化,这样你就可以增加
userFetched
未定义,因为它是在Promise.then()
中异步分配的。
以下代码应按预期工作。
if (commandFn === "/fetch") {
let userFetched: string;
returnText = `${commandFn} used with ${commandArg}`;
admin.database
.ref(`/Users/` + commandArg + "/userdata")
.once("value")
.then((snapshot) => {
userFetched = snapshot.val().userdata;
return res.status(200).send({
method: "sendMessage",
chat_id,
text: `${returnText} /n ${userFetched}`,
});
})
.catch((error) => console.error(error));
}
根据评论进行编辑
这就是我减少res.send
语句的方法。
async function MyCloudFunction() {
let userFetched: string;
if (commandFn === "/fetch") {
const snapshot = await admin.database
.ref(`/Users/` + commandArg + "/userdata")
.once("value");
userFetched = snapshot.val().userdata;
}
// DO OTHER STUFF
return res.status(200).send({
method: "sendMessage",
chat_id,
text: `${returnText} /n ${userFetched}`,
});
}