收藏
回答

wx.request的执行结果为何会这样?

对如下代码,按我的理解,从上到下执行后,理想中console.log的结果应该是:

预想中的console.log:
当前的m=0
当前的时间是XXX
m=0到达request最内部
m=0到达最内的时间是:XXXX

test(){
    for (let m = 0; m < 3; m++) {
      console.log('当前的m=',m)
      console.log('当前的时间是',Date.now())
      wx.request({
        url'https://api.a.cn',
        success:(res1)=>{
          wx.request({
            url'https://api.b.cn',
            success:(res2)=>{
              console.log('m=',m,'到达request最内部')
              console.log('m=',m,'到达最内时间是',Date.now())
            }
          })
        }
      })
     if(m<2) {
      this.sleep(5000)
     }      
    }
},

  sleep(delay) {
    for (let start = Date.now(); Date.now() - start < delay;);
  },


但实际执行下来,发现console.log是这样的:

为什么三次for循环都执行完毕了,才开始执行里面的request?如果想实现预想的功能,又该如何修改呢?
回答关注问题邀请回答
收藏

2 个回答

  • Hello W
    Hello W
    2022-09-19

    所有异步操作都会等同步操作执行完再执行,js基础,解决方法楼上说了async/await异步转同步~

    2022-09-19
    有用 1
    回复 1
    • 愿你所愿
      愿你所愿
      2022-09-19
      谢谢,谢谢大佬,受益匪浅,我回去补知识去了。
      2022-09-19
      回复
  • 拾忆
    拾忆
    2022-09-19

    百度下JS异步问题。

    配合async/await解决。

    2022-09-19
    有用 1
    回复 1
    • 愿你所愿
      愿你所愿
      2022-09-19
      感谢解答。我回去补补这块知识,之前不了解。再次感谢。
      2022-09-19
      回复
登录 后发表内容