V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
churchmice
V2EX  ›  JavaScript

问个先后顺序问题

  •  
  •   churchmice · 2018-03-18 19:21:38 +08:00 · 3805 次点击
    这是一个创建于 2202 天前的主题,其中的信息可能已经有所发展或是发生改变。
    事情是这样的,我想用 js 模拟一个商品提交的过程
    商品价格是 1000,可以使用优惠券,比如 100
    人肉流程是我先要点一下优惠券,价格才会变,之后我再去提交这个订单,这样最终只要付 990

    我用 js 的代码如下
    document.xx.click()
    document.xx.submit()

    我可以看到提交之前显示的最终价格是 990,但是提交完了还是扣了 1000

    我想问问大家这是为什么?是不是因为 click 操作需要时间?所以 submit 先触发了?
    19 条回复    2018-03-19 18:21:15 +08:00
    lhx2008
        1
    lhx2008  
       2018-03-18 19:23:18 +08:00 via Android
    可以打印下看看触发没有
    churchmice
        2
    churchmice  
    OP
       2018-03-18 19:25:35 +08:00 via Android
    @lhx2008 页面上我可以 click 看到触发了,而且价格也发生了变化
    akira
        3
    akira  
       2018-03-18 19:26:05 +08:00
    click 里面有异步操作?
    hlwjia
        4
    hlwjia  
       2018-03-18 19:34:19 +08:00 via iPhone
    @akira 这种情况,如果不是低级什么拼写错误之类的,肯定是异步的问题
    loading
        5
    loading  
       2018-03-18 19:35:39 +08:00 via iPhone   ❤️ 1
    js promise 了解一下
    churchmice
        6
    churchmice  
    OP
       2018-03-18 20:53:50 +08:00 via Android
    @akira 点完就是把优惠的金额从总价格里面去掉了,这种操作应该不需要再向服务器请求吧?
    churchmice
        7
    churchmice  
    OP
       2018-03-18 20:54:19 +08:00 via Android
    @loading 小白第一次接触 js 啊,今天已经被虐了好久了
    churchmice
        8
    churchmice  
    OP
       2018-03-18 20:55:15 +08:00 via Android
    @hlwjia 那我这种情况应该怎么搞?用 settimeout 给 click 加点延时,然后再 submit ?
    hlwjia
        9
    hlwjia  
       2018-03-18 20:59:02 +08:00   ❤️ 1
    @churchmice 为了验证是不是异步问题,可以加 timeout,但那个不是解决方案

    @loading 已经说了呀;能用 google,就 google 一下;不能,百度一下也有答案。
    akira
        10
    akira  
       2018-03-18 22:34:03 +08:00
    @churchmice 如果你们的设计是本地可以直接判断是否使用了优惠券的 然后就发修改后的价格到服务端的话,那基本上就走远了
    bxb100
        11
    bxb100  
       2018-03-18 23:32:17 +08:00 via Android
    @akira 😂怕是你没见过用页面金额生成订单支付的操作
    hlwjia
        12
    hlwjia  
       2018-03-18 23:33:44 +08:00
    @bxb100 没见过,但是能想像地出来这样的操作应该是挺多的
    ffkjjj
        13
    ffkjjj  
       2018-03-19 08:34:20 +08:00 via iPhone
    1000 - 100 = 900 :P
    churchmice
        14
    churchmice  
    OP
       2018-03-19 08:50:00 +08:00 via Android
    @ffkjjj 赞眼力
    churchmice
        15
    churchmice  
    OP
       2018-03-19 08:51:24 +08:00 via Android
    @hlwjia 刚才试了下,加个 delay 就好了,猜测 click 是个异步事件,没办法多试啊,有成本,哈哈哈哈
    churchmice
        16
    churchmice  
    OP
       2018-03-19 08:52:45 +08:00 via Android
    @akira click 是调用了一个另外一个 js,做了一些运算,虽然在本地,也可以认为是异步操作对吧?
    yangehappy
        17
    yangehappy  
       2018-03-19 15:58:20 +08:00
    这点代码。。。真的看不出来什么 多贴点代码吧
    chenyu8674
        18
    chenyu8674  
       2018-03-19 18:16:52 +08:00
    @churchmice
    如果 click 调用的方法里没有异步行为的话,click 执行过程也会是同步的
    建议上完整代码,尤其是 click 事件
    churchmice
        19
    churchmice  
    OP
       2018-03-19 18:21:15 +08:00 via Android
    @yangehappy 我不是撸网站的人,没法拿到所有代码啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3240 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:40 · PVG 19:40 · LAX 04:40 · JFK 07:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.