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

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

  •  
  •   delikely · 2017-10-01 20:15:33 +08:00 · 4336 次点击
    这是一个创建于 2607 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    17 条回复    2017-10-02 18:28:55 +08:00
    mrzhiin
        1
    mrzhiin  
       2017-10-01 20:22:25 +08:00
    async await
    caomu
        2
    caomu  
       2017-10-01 20:53:39 +08:00 via Android
    上面是新方法

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

    function b() {}

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

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

    2、异步函数,callback,promise,async/await 都行
    webcoder
        14
    webcoder  
       2017-10-02 10:19:34 +08:00
    同步就不说了,上面的前辈们都说清楚了。

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

    按个人口味啊
    sneezry
        16
    sneezry  
       2017-10-02 12:58:26 +08:00 via iPhone
    初学者建议先研究回调,理解了回调机制后再研究 promise,最后再研究 await async
    huoyingluoye
        17
    huoyingluoye  
       2017-10-02 18:28:55 +08:00
    基本都是回调,只是区分异步和同步的问题,楼上都说的很清楚了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2200 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:12 · PVG 00:12 · LAX 08:12 · JFK 11:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.