javascript - 停止代码执行,直到 XMLHttpRequest 周期完成

标签 javascript callback xmlhttprequest promise

您的 Google map 代码结构如下所示:

<script>
function initMap() {

}

var locations = 
[
        {lat: -31.563910, lng: 147.154312},
        {lat: -33.718234, lng: 150.363181}
]
</script>

<script async defer
    src="https://maps.googleapis.com/maps/api/js?key=API-key&callback=initMap" >
</script>

问题是,您希望通过调用服务器来填充 locations (使用 XMLHttpRequest ,即普通 JavaScript AJAX 调用,因为您不想使用 jQuery)。

并且您不希望在成功填充 locations 之前执行第二个脚本 block (对 Google Maps API 的调用)。 您将如何通过以下任一方式实现这一目标:

  • 回调?
  • JavaScript promise ?
  • 您还能想到其他方法吗?

另外,是a semaphore, as suggested here有可行的方法吗?

最佳答案

function initMap() {
  var xhr= new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
     LoadGoogleMaps();
    }
  };
  xhr.open();//<-- Your parameters go here
  xhr.send();
}

function LoadGoogleMaps(){
  // Logic to load maps
}

标准 XHR 文档可以在这里找到:http://www.w3schools.com/xml/ajax_intro.asp

信号量在概念上是一个好主意,但有时实现起来非常困难。通常,在 JavaScript 中,最佳实践是尽可能使用回调或 Promise。

关于javascript - 停止代码执行,直到 XMLHttpRequest 周期完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40050396/

相关文章:

javascript - 使用 XMLHttpRequest 获取非 utf8 数据

javascript - 如何取消ajax加载

jquery - iOS Phonegap 应用程序使用 XMLHTTPRequest 发布到安全的 Web 服务调用返回状态为 0

javascript - 无法获取水平滚动位置

javascript - <ul> 和 <li> - 具有交替行颜色的表格

javascript - Vue Js 我应该使用 Vuex 吗?

javascript - 如何在 marrionete.js 中构建调用链渲染 itemView,并使用 itemView 内的异步函数进行延迟

javascript - 如何替换捕获组而不是 RegEx 中的完整匹配项?

c# - 从 Delphi dll 回调到 C# app

delphi - 如何使用此 CustomSort 函数对 ListView 进行排序?