【发布时间】:2017-03-26 17:54:55
【问题描述】:
我一直在寻找 2 个小时的问题,即我的回调函数不会关闭 Ionic 2 中的 LoadingController。
我有一个函数,hideLoading():
hideLoading()
{
this.loader.dismiss();
}
成功函数中调用的
connectionSuccess = () =>
{
this.hideLoading();
var toast = Toast.create({
message: '...',
duration: 3000});
this.nav.present(toast);
}
由于某种原因它不起作用..但我刚刚发现它起作用了——如果我在两者之间放置一个 alert() ;或者如果我将代码更改为:
connectionSuccess = () =>
{
this.hideLoading();
this.loader.dismiss();
[...]
}
这是与时间相关的错误吗?介于两者之间的 alert() 时间或第二条隐藏指令似乎可以修复它。我在关闭之前检查了控制台日志中 this.loader 的内容,这是完全正确的。
如果我删除上述两条指令之一,它就不起作用。它需要两条指令——它们基本上做同样的事情,但只能一起工作..?
这是一个非常肮脏的修复。我怎样才能以干净的方式解决这个问题?我不明白为什么它的行为如此不可预测。
【问题讨论】:
-
什么是
this.loader,调用dismiss会返回什么?undefined?Promise?Observable?您可能缺少await、return或subscribe,但从提供的信息很难判断。 -
@AluanHaddad
this.loader是 Ionic 2 的ionic-angular的Loading类的一个实例。dismiss()方法返回ZoneAwarePromise {...}。 Await 听起来不错,但是在方法调用前面放置一个 await 时出现语法错误。它似乎确实是一个异步/等待问题,因为在两者之间放置一个警报可以解决它。编辑:我尝试了 alert(),但它不再修复它了。但就在之前,它使用警报工作() 之间. -
好的,所以它返回一个 Promise,然后使用
async hideLoading() { await this.loader.dismiss(); }然后你需要在调用hideLoading的方法中等待它。您也可以使用then并显式返回结果。 await 是更易读的选项。 -
仅供参考,警报起作用的原因可能是因为警报是实际上阻止事件循环的罕见浏览器 API 之一。
-
不知道为什么,也许你没有使用最新的 TypeScript(使用 >=2.2.1)。无论如何,你可以在没有
async/await和.then和.catch的情况下完成同样的任务
标签: javascript typescript ionic-framework ionic2