等待可观察对象时何时关闭离​​子加载控制器

When to dismiss the ionic loading controller while waiting for an observable

我想知道如何在等待异步 observable 到达时正确使用 ionic-2 加载控制器 - 因为 observable 可能会到达 none,单个或多个 "waves" 响应。

第一个问题-如何呈现

我应该使用 loader.present() 还是 loader.present().then(..。我看到很多代码示例 "ignore" 加载程序的异步性质(我什至看到 loader.present(//function to execute)

第二个问题-什么时候解雇

如前所述,来自订阅的响应可能会收到未知的 "waves" 响应 - 考虑到这一点,我应该何时关闭加载程序?如果没有回应怎么办?如果有几个回应怎么办? 例如:

let loader = this.loadingController.create({content : "something"})
loader.present().then(()=>{
    source.subscribe((school)=>{
        this.schools.push(school)
        loader.dismiss()
        }, err=> loader.dismiss()
    )
 })

第三题-如何解雇

我注意到有很多关于关闭加载控制器的问题(例如 )。解雇后赶上就够了..?载入后想跳转到另一个页面怎么办...?

感谢您的耐心等待。

first question - how to present?

呈现加载程序的正确方法是使用 then,否则您可能会遇到一些与错误动画相关的问题,也可能会遇到其他一些奇怪的问题。毕竟,如果方法 returns 是一个 promise,正确的使用方法总是在 promise 完成后做其他事情。

loader.present().then(() => { /* ... */ });

当我需要关闭加载时,我也会这样做:

loading.dismiss().then(() => { /* ... */ });

second question - when to dismiss?

使用加载的想法是让用户知道后台正在发生某些事情,因此我认为您应该在 第一波 之后关闭加载。

如果没有响应(例如结果为空),您可以包含一个 *ngIf="result.items.length === 0" 条件以显示 div 并显示一条消息,说明结果为空。如果新的 wave 到达时结果中包含某些项目,则 div 将自动隐藏。

third question - how to dismiss?

就像 present 方法一样,dismiss 也是 returns 一个承诺。在这种情况下,如果不使用 then,则更容易在动画中看到一些错误行为。因此,再次等待 dismiss 方法结束(通过使用 then),您可以推送一个新页面或做您需要做的事情,它应该可以正常工作:

loading.dismiss().then(() => { this.navCtrl.push(NewPage); });