JavaScript - 减慢循环速度



我在控制器中有这些代码,它们使用 $http 来调用 Web 服务来检索一些数据。下面是以下代码:

更新代码

   var boolGetBoothCoords = false;
      BoothDesignatedCoordsService.getBoothDesignatedCoords(strListShortListedBooth[i], 3)
 .then(function(response) {
        var data = response.data
        console.log('data', data.arrBoothDesignatedCoords)
        boothDesignatedCoords = data.arrBoothDesignatedCoords;
        boolGetBoothCoords = true;
})
console.log("boothDesignatedCoords ", boothDesignatedCoords ); // undefined
// And a lot of other codes

但是,由于 get $http 是异步方法,程序将立即调用控制台日志和代码,并且 boothDesignatedCoords 将未定义。我不想这样。我希望程序仅在 Web 服务使用完成后调用控制台日志和代码。所以我用这个答案做了以下事情:如何减慢javascript循环的速度:

    go();
    function go() {
        console.log("hello");
        if (boolGetBoothCoords == false) {
            setTimeout(go, 1000);
        }
        else
        {
        }
    }
    go()
   console.log("boothDesignatedCoords ", boothDesignatedCoords ); // undefined
   // OTHER CODES that uses variable boothDesignatedCoords will be undefined     as well
但是,我不知道

为什么它仍然会调用控制台日志,但尽管使用了此方法,但 Web 服务消耗尚未完成。有人可以帮我吗?谢谢。

setTimeout

异步的,所以实际上调用go函数并没有真正的区别。

将要发生的是:

  • 调用go()函数
  • 在函数内部调用setTimeout - 这将安排go(大约(1s 中调用
  • 之后立即致电console.log

您可能想要的是将您的console.log放在这样的回调then

var boolGetBoothCoords = false;
BoothDesignatedCoordsService.getBoothDesignatedCoords(strListShortListedBooth[i], 3)
  .then(function(response) {
    return response.data.arrBoothDesignatedCoords;
  })
  .then(function(boothDesignatedCoords) {
    console.log("boothDesignatedCoords ", boothDesignatedCoords );
  });


另一种选择(不推荐(是将console.log放在go函数中if语句的else部分。

在这种情况下,还应在整个代码段之前定义boothDesignatedCoords

假定在响应之后运行的代码应在响应后调用。

var boolGetBoothCoords = false;
BoothDesignatedCoordsService.getBoothDesignatedCoords(
    strListShortListedBooth[i], 3)
.then(function(response) {
    var data = response.data
    console.log('data', data.arrBoothDesignatedCoords)
    boothDesignatedCoords = data.arrBoothDesignatedCoords;
    boolGetBoothCoords = true;
    codeThatUsesTheResponseData();
});
function codeThatUsesTheResponseData() {
    console.log("boothDesignatedCoords ", boothDesignatedCoords ); // undefined
    // And a lot of other codes
}

相关内容

  • 没有找到相关文章

最新更新