[英]How do I use Javascript Promise Chaining with Firebase Authentication and Firebase?
我需要使用用户的Firebase用户ID利用存储在Firebase中的密钥。
我的功能步骤如下:
1)验证后获取Firebase用户ID
2)使用Firebase用户ID,拉出存储的API密钥值(我保存在节点中:app / {Firebase用户ID})
3)使用存储的API密钥值,运行我的最后一个函数
经过研究后,我得出的结论是我应该对下面的代码使用Javascript Promise Chaining,这让我很困难
firebase.initializeApp({databaseURL: "{}"});
var dbRef = firebase.database();
function pull_api_key_from_firebase_after_auth(func){
firebase.auth().onAuthStateChanged((user) => {
if (user) {
var app_ref = dbRef.ref('app').child(user.uid);
app_ref.on("child_added", function(snap) {
dictionary_object = snap.val()
api_key = dictionary_object.api_key
func(api_key)
})
}
});
}
function final_function(api_key){
console.log('processing final function')
}
pull_api_key_from_firebase_after_auth(final_function)
另外,我想像这样使api_key成为全局变量:
function pull_api_key_from_firebase_after_auth(func){
firebase.auth().onAuthStateChanged((user) => {
if (user) {
var app_ref = dbRef.ref('app').child(user.uid);
app_ref.on("child_added", function(snap) {
dictionary_object = snap.val()
api_key = dictionary_object.api_key
localStorage.setItem('api_key',api_key)
})
}
});
}
api_key = localStorage.getItem('api_key')
final_function(api_key)
但是我无法弄清楚如何使final_function以及其他函数等到定义了api_key
您必须使用firebase.auth().onAuthStateChanged
来获取.auth.currentUser.uid
在页面加载时将不可用。 它显示一微秒后(它是异步的)。
做你想简单地打造出一个承诺函数中调用它.onAuthStateChanged
和.then
做你的其他功能。 您的自定义承诺可能如下所示:
function fetchUserData(){
return new Promise(function(resolve, reject){
var db = firebase.firestore(); // OR realtime db
db.collection("users").get().then(function(snap) {
resolve (snap);
}).catch(function(error) {
reject (error);
});
});
}
在.onAuthStateChange
只需执行以下操作:
fetchUserData().then((snap) => {
// do your thing
})
.catch((error) => {
console.log(error);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.