账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    async函数块之间如何同步执行?
    37
    0

    请问多个async函数块之间如何同步的进行执行?
    例子:以下两个async函数块如何顺序进行?

    class Example {
        first;
        second;
        constructor(){
        }
        
        async  getFirstVal(){
         this.first = await [一个promise]
        }
        
        async  getSecondVal(){
        this.second = await[一个依赖于first的promise]
        }
        
        async  getOtherVal(){
        this.other = await[一个promise]
        }
        
        doSomeWork(){
        this.getFirstVal(); 
        this.getSecondVal();
        this.getOtherVal();
        ........
        }
    }
    

    请问,怎么做才能保证doSomeWork里面的firstsecond这两个异步块顺序执行?
    我不想将second这一部分的逻辑写入getFirstVal方法中,虽然这样能获得正确的执行顺序,因为getFirstVal可能在很多地方都会异步调用到,我想将他封装成一个单独的函数。请问有什么好的方法帮助我实现这种async块之间的顺序执行吗?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 笑看流年如风 普通会员 1楼

      在JavaScript中,async函数块之间不能直接同步执行。因为async函数块是异步的,它们的执行不会等待其他的代码执行完毕。如果需要在async函数块之间同步执行,可以使用Promise.all()函数。

      Promise.all()函数接受一个或多个Promise对象,然后返回一个新的Promise对象,当所有的Promise对象都 resolve 或 reject 时,这个Promise对象的 resolve 会被调用。

      例如:

      ```javascript let promises = [1, 2, 3];

      Promise.all(promises).then(responses => { console.log(responses); // 输出:[1, 2, 3] }).catch(err => { console.error(err); // 输出:错误信息 }); ```

      在这个例子中,我们创建了一个包含三个Promise对象的数组。然后我们使用Promise.all()函数来等待所有的Promise对象都 resolve。如果任何一个Promise对象的 resolve 未被调用,Promise.all()函数会将整个Promise数组 reject,并且不会执行catch块中的代码。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部