这是我整个编程生涯中最奇怪的错误。我一直在努力解决这个问题,但我找不到这段代码中发生的事情。它似乎没有任何意义。
我正在使用以下工具:
我正在尝试一种方法,“assignChat(user)”,它为用户分配聊天。它必须使用几个API,地理定位......实际上,这是一个很重要的方法。这就是为什么我把它分成两部分由promises连接,并在之后使用它们,所以我的方法看起来非常像这样:
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连接器没有超时,但我已经抓住了所有可能的异常,但是每次它都没有显示吐司时就会卡住它。
我只是不明白发生了什么。看来,Angular团队应该调查一件非常严肃的事情,我非常诚实。
知道那里会出现什么样的黑魔法?
更新:
进一步的信息:当我浏览“bugged”视图(没有toastify行,因此不显示聊天结果)时,按照例子,点击另一个聊天(将视图推入导航控制器),它以某种方式开始显示我预期的聊天结果。当我从navCtrl弹出新视图并返回页面时,预期结果现在可见。
角度表有问题吗?
答案 0 :(得分:1)
好的,解决方案并不明显。
似乎在任务完成之前渲染了视图。这是一项艰巨的任务,也许这就是为什么Angular无法正常工作的原因。尝试在构造函数和ionViewDidEnter()中执行它,但没有任何工作。
我的最终解决方案是通过ApplicationRef强制组件重新渲染,使用方法死角的.tick()方法。
解决了这一切!