我目前正在开发一个主要用于自学目的的应用程序,因为我还没有完全习惯 js,所以我可以使用一些帮助来解决我的问题:
在我的应用程序中,我使用了一个 Javascript 库 (jqMobi),它用于 DOM 操作、页面转换、ajax 调用等,我还使用 phonegap 访问设备功能,例如地理定位。
当我启动我的应用程序时,我想获取设备的地理位置,向我的服务器发送一个 ajax (jsonp) 请求(包括设备的地理位置),该请求返回我将用于构建的 JSON 对象数组列出一个 list 。
在获取地理定位之前,我需要等待 phonegap 加载。在使用 jqMobi 进行 ajax 调用和处理响应之前,我还需要等待它加载。
所以我基本上必须听一些事件
document.addEventListener("DOMContentLoaded",execute_this,false); //jqMobi is now ready
document.addEventListener("deviceready", execure_sth, false); //Phonegap is now ready
如何在这两个事件都触发后立即执行一个函数,而不是之前?
如果我使用 jQuery,我会使用它的 $.Deferred
对象和它的 When ... Then 函数,但由于我无法访问这些,所以我正在寻找一个替代方案。
最佳答案
乍一看,像这样的东西肯定有用:
var executed_this = false, executed_sth = false;
function execute_this() {
executed_this = true;
combined_execution();
}
function execute_sth() {
executed_sth = true;
combined_execution();
}
function combined_execution() {
if (executed_this && executed_sth) {
// magic!
}
}
但是不可扩展(如果你想等待第三个事件怎么办?)。计数器可以工作:
var wait_on = 2;
function execute_this() {
combined_execution();
}
function execute_sth() {
combined_execution();
}
function combined_execution() {
wait_on--;
if (wait_on === 0) {
// magic!
}
}
更具可扩展性,但假设事件只触发一次。无论哪种方式,这些都是可以控制您所要求的流量控制类型的原语,而其他一切(在大多数情况下)都是对这两者的更高级别的抽象。
关于javascript - 等待多个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13960773/