添加"location.replace"时,Firebase 实时数据库未保存数据



我正在尝试将数据推送到Firebase实时数据库,在推送(并保存(数据后,浏览器应该会打开另一个页面。我使用了";location.replace(("函数打开下一页,但添加位置。替换行会使数据不保存在Firebase实时数据库中。

这是我的代码

var updates = {};
updates['/users/' + document.getElementById('username').value] = data;
firebase.database().ref().update(updates);
console.log("Saved successfully")
location.replace("nextpage.html");

update函数是异步的;它需要一些时间才能完成。如果你想等到更新完成,那么你需要使用它返回的承诺:

var updates = {};
updates['/users/' + document.getElementById('username').value] = data;
firebase.database().ref().update(updates)
.then(() => {
console.log('Saved successfully');
location.replace('nextpage.html');
});

或使用async/await:

async function someFunction () {
var updates = {};
updates['/users/' + document.getElementById('username').value] = data;
await firebase.database().ref().update(updates);
console.log("Saved successfully")
location.replace("nextpage.html");
}

更新似乎是异步函数,返回promise。所以你应该正确处理它;位置";可能在更新完成之前出现。

这样改:

firebase.database().ref().update(updates).then(() => {
console.log("Saved successfully")
location.replace("nextpage.html");
}).catch(error => {console.log('Error:', error)})

如果您不想使用promise,请为更新函数提供一个额外的参数,该参数将用作回调函数,即在更新完成时调用:

firebase.database().ref().update(updates, function() {
console.log("Saved successfully")
location.replace("nextpage.html");
})

最新更新