gpt4 book ai didi

javascript - 全局变量未传递 - Javascript FCF

转载 作者:行者123 更新时间:2023-12-03 01:20:17 24 4
gpt4 key购买 nike

我正在使用 firebase 云函数,在其中定义变量 commentIdSpecific。当我将其记录在函数内时: -- console.log(comm id ${commentIdSpecific}); -- 它会打印其值。当我尝试在此处打印它时: -- console.log(test of variables inisde of post: ${usernameWhoOwnsThePost}, uwotpi: ${commentIdSpecific}) -- 它返回未定义。我看过三个谈论全局变量的网站,它似乎与我这里的没有任何不同。

如何让第二个打印语句中的值出现在第一个打印语句中?提前致谢。

var commentIdSpecific;
db.ref(`/users/${usernameWhoOwnsThePost}/posts/${usernameWhoOwnsThePostID}/comments`).once('value').then(snap => {
commentIdSpecific = snap.val();
let ids = [];
for (var id in snap.val()) {
ids.push(id);
}
let lastValueId = ids[ids.length - 1]
console.log(`last id value ${lastValueId}. UserPost: ${usernameWhoOwnsThePost}. user owner post id: ${usernameWhoOwnsThePostID}...`);
commentIdSpecific = lastValueId;
console.log(`comm id ${commentIdSpecific}`);
return commentIdSpecific;
}).catch(err => {
console.log(err);
});


var commentPoster;
db.ref(`/users/${usernameWhoOwnsThePost}/posts/${usernameWhoOwnsThePostID}/comments/${commentIdSpecific}/comment`).once('value').then(snap => {
commentPoster = snap.val();
console.log(`commentPoster: ${snap.val()}`);
console.log(`test of variables inisde of post: ${usernameWhoOwnsThePost}, uwotpi: ${commentIdSpecific}`)
return commentPoster
}).catch(err => {
console.log(err);
});

最佳答案

once() 是异步的,并立即返回一个 promise ,指示异步工作何时完成。同样,then() 立即返回并带有一个 promise 。每当查询结果完成时,您传递给 then() 的回调就会在一段未知的时间后执行。在此之前,您的代码将继续在下一行执行,这意味着 commentIdSpecific 在首次访问时将是未定义的。

您需要使用 promise 链来确保依赖于异步工作结果的工作仅在可用后才能访问。

您可能想观看本页面上有关 JavaScript Promise 的视频,以便更好地了解它们在 Cloud Functions 中的使用方式。了解它们如何编写有效的代码绝对至关重要。

https://firebase.google.com/docs/functions/video-series/

关于javascript - 全局变量未传递 - Javascript FCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51795795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com