变量userFetched在Firebase云函数中分配之前使用



有很多类似的问题,但没有一个能解决我的查询。

这是我的代码:

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}`,
});
}

相关内容

  • 没有找到相关文章

最新更新