Javascript 角度4奇怪错误:查询不';t在-不-显示消息时结束

Javascript 角度4奇怪错误:查询不';t在-不-显示消息时结束,javascript,angular,typescript,ionic-framework,Javascript,Angular,Typescript,Ionic Framework,这是我整个编程生涯中最奇怪的错误。我一直在努力解决这个问题,但我找不到这段代码中发生了什么。这似乎毫无意义 我正在使用以下工具: 离子3 角度4 打字脚本/ES6 我正在尝试一个方法“assignChat(user)”,它将聊天分配给一个用户。它必须使用几个API,地理定位。。。实际上,这是一个很大的方法。这就是为什么我把它分成两部分,通过承诺连接起来,然后使用它们,所以我的方法看起来很像这样: assignChat(user){ const getLocationName =

这是我整个编程生涯中最奇怪的错误。我一直在努力解决这个问题,但我找不到这段代码中发生了什么。这似乎毫无意义

我正在使用以下工具:

  • 离子3
  • 角度4
  • 打字脚本/ES6
我正在尝试一个方法“assignChat(user)”,它将聊天分配给一个用户。它必须使用几个API,地理定位。。。实际上,这是一个很大的方法。这就是为什么我把它分成两部分,通过承诺连接起来,然后使用它们,所以我的方法看起来很像这样:

    assignChat(user){
  const getLocationName = () => {
    return new Promise((resolve,reject) => {
      // 30 lines of code
    });
  }
  const assignOrCreateChat= (area) => {
    return new Promise((resolve,reject) => {
      // 40 lines of code
    });
  }
  const getLocationName = () => {
    return new Promise((resolve,reject) => {
      // 30 lines of code
    });
  }


   // then I use the inner functions here and write an extra 60-70 lines of code  
}
好的!这个很好用。经过几次测试后,该算法没有太多问题,尽管它相当繁重,需要~0.5秒才能正确执行、完成查询并显示结果

事情是。。。我有一些祝酒台显示一些信息,比如你在哪里。我想删除它们,从内部函数getLocationName()开始。这就是我想跟大家讨论的代码:

const getLocationName = () => {
        return new Promise( (resolve, reject) => {
            const ADDRESS_LEVEL = 2; 
            this.reverseGeocode(ADDRESS_LEVEL).then( address => {
      --->      this.toastify("You have been located at: "+address, 1500);
                let query = new Parse.Query("PoliticalArea");
                // more code
我用箭头标出的那条线,就是给我带来问题的那条线我的意思是,你可能认为代码失败是因为行,但这完全是错误的!如果删除该行,算法会突然停止工作,并且无法显示任何结果

“toastify”方法是我为自己展示祝酒的一种快速方法。实际上,它工作得很好!这就是实现:

   toastify(message, duration){       
      this.toastCtrl.create({
             message: message,
             duration: duration
      }).present();
   }
不像最危险的方法。事实上,如果没有它,代码似乎无法工作。如果我对这行进行注释,或者删除它,我就不会从我之前向您展示的大算法中得到任何结果或错误。我已经捕获了所有可能的异常,尽管API连接器没有超时,但每次它不显示toast时都会卡住

我只是不明白发生了什么。在我看来,这似乎是一件非常严肃的事情,棱角分明的团队应该进行调查

你知道那里有什么黑魔法吗

更新:

一些进一步的信息:当我浏览“bugged”视图(没有toastify行,因此不显示聊天结果)时,例如,单击另一个聊天(将视图推入导航控制器),它会以某种方式开始显示我期望的聊天结果。当我从navCtrl弹出新视图并返回页面时,预期结果现在可见


这是角形手表的问题吗?

好的,解决方案不明显

看起来视图是在任务完成之前呈现的。这是一项艰巨的任务,所以也许这就是Angular不能正常工作的原因。尝试在构造函数和IonViewDiCenter()中执行它,但没有任何效果

我的最终解决方案是通过ApplicationRef,在方法的死胡同处使用.tick()方法,强制组件重新渲染


这一切都解决了

很难说清楚,因为不是所有的代码都包含在内(可以理解),我对烤面包机的体验是,如果
present()
是由一个包含
create({})的变量声明的,那么它们似乎工作得更好(我会得到远程视图未发现错误)
所以
让toast=…
然后
toast.present()
可能是因为它是一个提供者,返回
。。还有哪个生命周期事件保存了这段代码?@arkade我不知怎的找到了一个解释:我是否将这段代码放在IonViewDiCenter()的构造函数中并不重要,所以我认为可能视图试图在实际完成任务之前由Angular渲染。我马上就发布修复程序。