帖子
帖子
用户
博客
课程
12下一页
返回列表 发新帖
显示全部楼层
2
帖子
0
勋章
Y币

[其他] 两个alert,写在后面的alert却提前执行了

[复制链接]
发表于 2014-10-17 15:21:25
api.alert({msg:'同步1'});

wordstrStart = ret.wordStr;

api.alert({msg:wordstrStart});


程序会先执行api.alert({msg:wordstrStart}); , 而后弹出api.alert({msg:'同步1'});


另外,apicloud需要加入同步机制,否则这种现象会很多很多。

20
帖子
1
勋章
7573
Y币
您好,这个地方肯定是同步的,并且顺序执行。因为你先执行的alert(1),后执行的alert(2),按照先后顺序,alert(2)盖在了alert(1)上,点击关闭alert(2)后才出现alert(1),所以你看着以为先执行了alert(2)。
18
帖子
0
勋章
398
Y币
楼主 暴露了
2
帖子
0
勋章
398
Y币
不是这样的,我写的代码可能让你误会了,真正的代码不是仅仅3行,中间还有一些其他的代码,大概的过程是这样的。
  1. ,function(ret,err){//某回调函数
  2.    if(ret.index == 0)
  3.    {
  4.       //执行func1 、 func2、 func3 ……等,篇幅较大就不写了。
  5.       api.alert({msg:'0'});
  6.    }
  7.    api.alert({msg:'after 0'});
  8.    if(ret.index == 1)
  9.    {
  10.       api.alert({msg:'1'});
  11.    }
  12.    api.alert({msg:'after 1'});
  13.    if(ret.index == 2)
  14.    {
  15.       api.alert({msg:'2'});
  16.    }
  17.    api.alert({msg:'after 2'});
  18. }
复制代码


我们先假设ret.index = 0,执行回调函数后我们看到的现象是这样的。

(after 2)
(after 1)
(after 0)
这几个alert弹出的顺序是正确的,因为(after 2)盖在(after 1)上面,(after 1)盖在(after 0)上面,但func1、func2、func3 ……是在弹出了这些alert后才执行的,因为我看到func1、func2等函数的交互过程是在点掉了(after 0)窗口之后才出来的,也就是说程序没有等待func1、func2,、func3几个函数执行完毕就先渲染了后面的alert。

我想这个和js被浏览器加载的执行机制有关,也与渲染顺序有关,应该不是apicloud的原因,但我仍然希望apicloud能解决这个问题,毕竟我等C程序员对于这样的执行过程实在是不适应。
2
帖子
0
勋章
398
Y币

,暴露啥?
18
帖子
0
勋章
398
Y币
成王败寇 发表于 2014-10-20 10:57
不是这样的,我写的代码可能让你误会了,真正的代码不是仅仅3行,中间还有一些其他的代码,大概的过程是这 ...

这个 问题 比较专业!
1.浏览器上 alert 和 apicloud.alert是两种不同的机制.
2.浏览器,单线程,alert会引起进程堵塞,不点击alert,js代码就不会继续执行.
3.apicloud的api.alert弹出的是手机原生弹出框,不会堵塞进程. 你不点击 确认 按钮,js代码 也会继续执行.

最后,我大致能猜出你要实现的逻辑,给你个小TIP   :  用 闭包 来保证变量的唯一性
18
帖子
0
勋章
398
Y币

  你不懂 爱
2
帖子
0
勋章
398
Y币
生于1984 发表于 2014-10-20 18:25
这个 问题 比较专业!
1.浏览器上 alert 和 apicloud.alert是两种不同的机制.
2.浏览器,单线程,alert会引 ...

搜嘎!
12
帖子
0
勋章
47
Y币
生于1984 发表于 2014-10-20 18:25
这个 问题 比较专业!
1.浏览器上 alert 和 apicloud.alert是两种不同的机制.
2.浏览器,单线程,alert会引 ...

问下,弹出框样式可以改吗?貌似用的是原生的弹出框,跟我的界面风格差得有点远啊
18
帖子
0
勋章
398
Y币
laodao1990 发表于 2015-1-19 17:13
问下,弹出框样式可以改吗?貌似用的是原生的弹出框,跟我的界面风格差得有点远啊 ...

直接 自己 重写 api.alert 方法就可以了啊
api.alert = function(){
// 自己的弹出框
}
12下一页
您需要登录后才可以回帖 登录

本版积分规则