我正在尝试将JavaScript引入同步行为,但到目前为止我都失败了。
我已经尝试了30种或更多种不同的方法,这是基于另一个答案的最新尝试,在StackOverflow上:
function fnc () {
$.ajax({
type: 'GET',
url: "libraries/resources/data.json",
dataType: 'json',
success: function (data) {
...
objSomething = {
...
};
},
error: function () {}
});
}
fnc().then(function(objSomething) {
google.maps.event.addDomListener(window, 'load', function(){ initialize(objSomething); });
}).catch(function(objSomething) {
...
});
然而,我收到一个错误:
TypeError:undefined不是对象(评估 'FNC()。然后')
我尝试过的大多数方法都会导致类似的错误。
至于谷歌地图代码,它确实有效(尽管并非总是如此,因为代码执行的异步性质。)
值得注意的是,虽然我能够从头开始编写复杂的代码,但是当谈到底层的机制时,我并不是那么精通。
我正在使用jQuery 2.2.2,通过Google API CDN。
答案 0 :(得分:3)
这是您正在寻找的解决方案。
function fnc () {
var dfd = jQuery.Deferred();
$.ajax({
type: 'GET',
url: "libraries/resources/data.json",
dataType: 'json',
success: function (data) {
...
objSomething = {
...
};
dfd.resolve(objSomething);
},
error: function (error) { dfd.reject(error); }
});
return dfd.promise();
}
$.when(fnc()).then(function(objSomething) {
google.maps.event.addDomListener(window, 'load', function(){
initialize(objSomething);
});
}, function(error){
//Handle Error
});
答案 1 :(得分:0)
使用$.ajax
功能,您可以使用then
功能。请参阅以下链接:
http://wildermuth.com/2013/8/3/JavaScript_Promises