在将Chrome升级到58之前,我没有错误。
进一步说明:我的代码正在星期天工作,我不知道执行的异步性,两天后发现了这个!
private void insertTaak_Clicked(object sender, EventArgs e)
{
var navPage = new DetailTaak("0") { Title = "Taak toevoegen" };
var app = Application.Current as App;
var mainPage = (MenuPage)app.MainPage;
mainPage.Detail = new NavigationPageBar(navPage);
}
输出:
1
2
4
3
1-为什么'然后'在console.log之后执行(2)???
可能答案:因为承诺结果在正文返回后执行
2-为什么'然后'在console.log之后执行(4)???
答案 0 :(得分:1)
由于promises的异步性质,then
处理程序将存储在事件循环的消息队列中。只要JavaScript运行时的调用堆栈为空,就会处理此队列的元素。在您的场景中,需要运行console.log(4);
才能将封闭函数从调用堆栈中取出,此时JavaScript引擎可以开始处理消息队列中的项目(假设封闭函数是顶级函数) ),导致在then
内运行代码。
答案 1 :(得分:0)
Thank you @PatrickRoberts for providing a reference:
Promise自然是ASYNC,并在下一个事件循环执行时执行。