我对这个事实有疑问,我似乎无法弄清楚在更新Firestore时如何显示加载程序。
我提供了以下示例,但不要介意我在示例中使用的东西。关键是,在所有创建或更新完全完成之前,我似乎无法弄清楚如何显示加载指示器。
如果我尝试在Firestore调用之前和之后设置状态,则微调器将仅在1秒内出现,因为实际的调用在更新Firestore时在后台运行(我认为是异步的)。
有人可以帮我吗?
先谢谢了。
array.forEach(itemInArray => {
db.where(test, '==', itemInArray.test )get()
.then((result) => {
// try to update doc first
db.doc(result.docs[0].id).update({
test: 'test'
});
})
// update successfull
.then(() => console.log('Document exists! We have updated the current one'))
// If the update failed, we create new doc
.catch((err) => {
console.log('Created document);
db.doc().set({
test: 'test'
});
});
});
答案 0 :(得分:1)
正如我们在聊天中讨论的那样,如果您的数据库操作需要顺序执行,则可以执行以下操作:
public MainWindow()
{
InitializeComponent();
ps = new ProxyService();
ps.AcceptConnection();
DataContext = new BaseViewModel { MessageViewModel = ps };
}
如果某些操作可以并行进行,则需要考虑使用showSpinner();
updateFirstThing()
.then(() => updateSecondThing())
.then(() => updateThirdThing())
.catch(err => handlerError(err))
.finally(() => hideSpinner());
以确保在所有的诺言都兑现(或有错误)时隐藏微调框。