V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
delikely

自学的 javascript,不懂怎么实现函数的顺序执行,请教。

  •  
  •   delikely · Oct 1, 2017 · 5008 views
    This topic created in 3132 days ago, the information mentioned may be changed or developed.

    自学 javascript,正在写点小东西。被程序的流程给搞蒙了。

    请问 V 友,怎么实现 A ()执行完后才运行 B ()。

    之前用settimeout用着用着自己就晕了,有什么比较好的方案吗?

    17 replies    2017-10-02 18:28:55 +08:00
    mrzhiin
        1
    mrzhiin  
       Oct 1, 2017
    async await
    caomu
        2
    caomu  
       Oct 1, 2017 via Android
    上面是新方法

    老方法是 callback
    WriteJob
        3
    WriteJob  
       Oct 1, 2017
    1. 创建个全局变量 flag(标志)为 false,函数 A 执行完后,把这个标志设为 true。然后写个判断如果这个标志等于 true,函数 B 就执行,执行完再把这个标志设为 false。
    2. ES6 就用 Promise 或者楼上提到的异步。
    FrankFang128
        4
    FrankFang128  
       Oct 1, 2017
    a()
    b()
    liuzhiyong
        5
    liuzhiyong  
       Oct 1, 2017 via iPad
    @FrankFang128 哈哈,我也是这样想的。
    isbase
        6
    isbase  
    PRO
       Oct 1, 2017
    function a(cb) {
    // do something
    cb()
    }

    function b() {}

    a(b)
    zhlssg
        7
    zhlssg  
       Oct 1, 2017
    首先搞清楚你的函数是同步执行还是异步执行的吧
    delikely
        8
    delikely  
    OP
       Oct 1, 2017
    @zhlssg 测试发现是异步执行(所以才来问的)的,请问怎么指定函数的执行方式。有什么资料推荐吗。谢谢!
    zhlssg
        10
    zhlssg  
       Oct 1, 2017
    @delikely 9L
    正解,最方便的是 promise,如果用了 babel 的话,可以用 async await
    romennts
        11
    romennts  
       Oct 1, 2017
    ```
    async.series({
    flag1:function(done){
    done(null,authres);
    });
    }
    },function(error,results){
    console.log(results);
    })
    ```

    类似于这样吧....
    SilentDepth
        12
    SilentDepth  
       Oct 1, 2017
    函数的执行方式不是「指定」出来的。不如发一下你的代码?怎样的 a 和 b 会被异步执行,除非 a 和 b 里面有 setTimeout
    keenwon
        13
    keenwon  
       Oct 1, 2017
    1、同步函数,直接
    a()
    b()

    2、异步函数,callback,promise,async/await 都行
    webcoder
        14
    webcoder  
       Oct 2, 2017
    同步就不说了,上面的前辈们都说清楚了。

    异步的话,在回调的函数里再引用下一个函数,注意回调分成功和失败两种回调,除非两个回调函数都一样,否则两个都要作下一个函数的引用。
    PythonAnswer
        15
    PythonAnswer  
       Oct 2, 2017 via Android
    我喜欢用 promise

    按个人口味啊
    sneezry
        16
    sneezry  
       Oct 2, 2017 via iPhone
    初学者建议先研究回调,理解了回调机制后再研究 promise,最后再研究 await async
    huoyingluoye
        17
    huoyingluoye  
       Oct 2, 2017
    基本都是回调,只是区分异步和同步的问题,楼上都说的很清楚了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   972 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 21:50 · PVG 05:50 · LAX 14:50 · JFK 17:50
    ♥ Do have faith in what you're doing.