我对 javascript 比较陌生,我正在尝试清理我的原型代码,因为它嵌套了很深的回调层,而且很难阅读。我正在努力实现这样的目标:
GoogleMaps.ready(map_id_name, function(map) {
g_map = map.instance;
})
...
call_when_ready(g_map, set_map_viewport);
call_when_ready(g_map, create_markers);
call_when_ready(g_map, update_icons);
call_when_ready(g_map, update_geometry_display);
call_when_ready(g_map, update_ui_display);
我知道我可以在 GoogleReady 回调中移动所有 call_when_ready ,但这是一个简化的示例,call_when_ready
在另一个回调中调用。
所以我想出了这个功能,但它不起作用:
function call_when_ready(variable, callback) {
let interval = setInterval(() =>
{
if (variable != undefined && variable != null) {
clearInterval(interval);
callback();
}
}, 3000);
}
即使g_map
正在填充变量,它也始终显示为 null 。我怎样才能以干净的方式实现这一目标?我也愿意使用 jQuery,但是 Promise 和 Deffer ed 对于一些琐碎的事情来说似乎太多了。或者也许有更好的方法,例如链接回调,我不知道:
function().finished(function).finished(alert(""));
如果不是传递变量来检查,而是传递一个返回它的函数,它会起作用:
/* mockup */
var g_map;
var map_id_name = "example";
var GoogleMaps = {
ready: (a, f) => {
f({
instance: 1
});
}
}
// simulate map being ready after 2.5 seconds
setTimeout(() => {
GoogleMaps.ready(map_id_name, function(map) {
g_map = map.instance;
console.log("g_map set");
});
}, 2500);
function call_when_ready(getVariable, callback) {
let interval = setInterval(() => {
if (getVariable()) {
clearInterval(interval);
callback();
}
}, 2000);
}
function getGMap() {
return g_map;
}
call_when_ready(getGMap, set_map_viewport);
call_when_ready(getGMap, create_markers);
function set_map_viewport() {
console.log("set_map_viewport");
}
function create_markers() {
console.log("create_markers");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句