JavaScript:异步案例
JavaScript: asynchronous case
我有以下代码:
var IPMapper = {
markerArray = [];
addIPArray: function(ipArray) {
.....
for (var i = 0; i < ipArray.length; i++) {
IPMapper.addIPMarker(ipArray[i], i, ipArray.length, IPMapper.f_callback);
}
return IPMapper.markerArray;
},
addIPMarker: function(ip, i, ip_array_length) {
var url = encodeURI(IPMapper.baseUrl + ip + "?callback=?");
$.getJSON(url, function(data) {
var latitude = data.latitude;
var longitude = data.longitude;
var latlng = new google.maps.LatLng(latitude, longitude);
var marker = new google.maps.Marker({
draggable: false,
position: latlng
});
IPMapper.markerArray.push(marker);
}
}
}
我试过:
IPMapper.addIPArray(array_with_ips);
但是我得到一个空数组。如何返回填充数组?我需要从呼叫IPMapper.addIPArray
返回结果。我尝试为 IPMapper.addIPMarker
进行回调,但这不是我需要的(我只需要调用一个函数并得到结果(RoR 中下一次缓存的一些情况))。请对此发表任何评论。
一个(不好的)选项是使用$.ajax
而不是$.getJSON
,你可以设置async=false
,但async=false
已被弃用,因此强烈建议不要这样做。
更好的选择是使用 .done()
在回调函数中分配值。然后,您可以将其公开为IPMapper
对象的属性,而不是从addIPArray
返回IPMapper.markerArray
,并在以后获取它。然后考虑引发一个事件,指示它在 ajax 调用完成时准备就绪,并在该事件的处理程序中,访问IPMapper.markerArray
来执行您需要执行的操作。
但是我得到一个空数组。如何返回填充数组?我需要 从调用 IPMapper.addIPArray 返回结果。我尝试回调 IPMapper.addIPMarker,但这不是我需要的(我只需要调用一个 函数并得到结果(RoR 中下一次缓存的一些情况))。请 对此的任何评论。
你唯一能从IPMapper.addIPArray返回的就是一个承诺。你不能从异步操作返回任何其他内容,因为它是异步的,javascript 不知道结果何时会 available.so
addIPMarker: function(ip, i, ip_array_length) {
var url = encodeURI(IPMapper.baseUrl + ip + "?callback=?");
return $.getJSON(url, function(data) {
var latitude = data.latitude;
var longitude = data.longitude;
var latlng = new google.maps.LatLng(latitude, longitude);
var marker = new google.maps.Marker({
draggable: false,
position: latlng
});
IPMapper.markerArray.push(marker);
}
然后
IPMapper.addIPArray(/*..arguments..*/).done( function(result) {
//continue the code here
});
http://api.jquery.com/category/deferred-object/
异步操作类似于单击某些内容,并且希望代码在单击事件时执行某些内容。你无法知道点击何时会发生,你所能做的就是编写一个点击事件处理程序。
- esri javascript异步打印
- JavaScript异步问题
- $translateProvider.useStaticFilesLoader的Angular Translate异步定
- 异步facebook功能
- 异步并行错误
- 在Redux中,我应该在哪里编写复杂的异步流
- 角度异步http自动完成
- 如何从SeleniumWebdriver获取异步Javascript响应
- 如何使用异步调用更改工厂的变量
- 在等待异步任务时永久循环
- 如何在异步函数中使用javascript对象
- 调用后不异步Ajax忽略函数
- learnyounode#9杂耍异步
- 异步获取数据使用JavaScript同步获取数据
- Meteor:异步回调问题
- 如何以异步方式打印q中的项目
- javascript函数中的异步与同步.(Node.js)
- Fresh Spark Install+Homestead上的Vue异步堆栈跟踪错误
- 在我的案例中,如何获取异步数据
- JavaScript:异步案例