如何等待 firebase.database().ref('users/' + userId).set() 完成,然后再调用下一个函数?



我使用以下异步函数将数据写入我的 Firebase 实例:

function writeUserData(uid, fn, ln, userEmail) {
firebase.database().ref('users/' + uid).set({
firstName: fn,
lastName: ln, 
email: userEmail
});
};

一旦writeUserData完成,那么我想将用户重定向到不同的页面:

window.location.href = "./mypage.html";

据我所知,这可以通过承诺来完成,但我真的可以用一个很好的例子来解决这个问题。

根据 Firebase 文档: https://firebase.google.com/docs/database/web/read-and-write#receive_a_promise,set方法返回一个承诺。在这种情况下,最简单的示例是:

function writeUserData(uid, fn, ln, userEmail) {
firebase.database().ref('users/' + uid).set({
firstName: fn,
lastName: ln, 
email: userEmail
}).then(function onSuccess(res) {
window.location.href = "./mypage.html";
}).catch(function onError(err) {
// do sth, e.g. console.error(err);
});
};

您的代码和我的示例之间的区别在于我添加的部分:

.then(function onSuccess(res) {
window.location.href = "./mypage.html";
}).catch(function onError(err) {
// do sth
});

简而言之,这意味着"如果请求成功,请执行onSuccess。如果没有 - 做onError.

您可以在此处获取有关承诺如何工作的更多信息:承诺 mdn 文档


为了提高可读性,你可以这样写:

function writeUserData(uid, fn, ln, userEmail) {
firebase.database().ref('users/' + uid).set({
firstName: fn,
lastName: ln, 
email: userEmail
})
.then(onSuccess)
.catch(onError);
};
function onSuccess(res) {
window.location.href = "./mypage.html";
}
function onError(err) {
// do sth
}

最新更新