javascript - 需要函数等待事件处理程序完成后再执行下一个函数

标签 javascript sqlite air

我见过很多类似的问题,但没有一个真正回答我的问题。我认为这很简单,但我想事实并非如此。

我需要调用一个函数 20 次,每次使用一组不同的 SQL 语句。 调用的函数执行 SQL 查询,结果由 eventHandler 处理。我需要在执行下一个函数调用之前完成对事件处理程序的检查。

由于事件处理程序是异步的,因此调用函数无需等待处理程序即可完成。我需要 queryFunction 等待 queryHandler 完成,然后再转到下一个 queryFunction。虽然我的项目是 AIR,但我怀疑这不是问题的一部分。

我希望我已经说清楚了,我对 javascript 比较陌生。

function mainFunction(){
   queryFunction (var1, var2);  // There would be twenty of these with 
   queryFunction (var1, var2);  //  different values for var1 and var2
   queryFunction (var1, var2);
   queryFunction (var1, var2);
   // etc, etc....
}

function queryFunction (){
    var sqlStatment =   'SELECT Field1, Field2, Field3'+
        'FROM [TableName]  ' +
        'WHERE Field1= var1 AND Field2= var2'; //simplified code            
var stmt = new air.SQLStatement();
stmt.sqlConnection = conn;
stmt.text = sqlStatment;
stmt.addEventListener(air.SQLEvent.RESULT, queryHandler);
stmt.addEventListener(air.SQLErrorEvent.ERROR, errorHandler);   
stmt.execute();
}

    function queryHandler(event){ 
        // queryHandler code
    }

最佳答案

这变得很棘手。您确实需要某种队列(函数调用或查询参数)。您的查询处理程序(或结果处理程序,如果需要)将在完成后启动队列中的下一个查询。

var queue = [];

function mainFunction(){
   queryFunction (var1, var2);  // There would be twenty of these with 
   queryFunction (var1, var2);  //  different values for var1 and var2
   queryFunction (var1, var2);
   queryFunction (var1, var2);
   go();
}

function queryFunction (){
   queue.push( arguments );
}

function go() {
   nextQuery();
}

function nextQuery() {
   if (queue.length > 0)
   {
     params = queue.shift();

     var sqlStatment =   'SELECT Field1, Field2, Field3'+
        'FROM [TableName]  ' +
        'WHERE Field1= ' + params[0] + ' AND Field2= ' + params[1]; //simplified code            
     var stmt = new air.SQLStatement();
     stmt.sqlConnection = conn;
     stmt.text = sqlStatment;
     stmt.addEventListener(air.SQLEvent.RESULT, queryHandler);
     stmt.addEventListener(air.SQLErrorEvent.ERROR, errorHandler);   
     stmt.execute();
   }
}

function queryHandler(event){ 
    // queryHandler code
    // ...
    // and then...
    nextQuery();
}

关于javascript - 需要函数等待事件处理程序完成后再执行下一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16491913/

相关文章:

PHP SQLite 喜欢慢

windows - AS3/AIR : Maximize desktop application window on start up (? )

ruby-on-rails - 找不到 gem 'sqlite3 (>= 0) ruby'

apache-flex - 类引用和类实例之间的区别

使用 Air 3.9 的 iOS 应用程序 - 我们如何重新加载以前加载的 swf?

javascript - 仅当我收到该请求的响应后,如何才能继续循环包含 XMLHttpRequest 的 JavaScript 函数

javascript - 动态项目 View 模型 knockout

javascript - 尝试编写一个 for 循环来按此顺序警告每个项目,而不为每个项目编写alert()?

javascript - 无法弄清楚为什么 requirejs 优化器没有及时加载某些模块

android - execSQL 导致语法错误