簡體   English   中英

異步Javascript

[英]Asynchronous Javascript

function buildRpt() {
  /* Initialize document here */
  db.transaction(
    function(trn) {
      trn.executeSql(
        'SELECT * FROM table',
        null,
        function(trn,result) {
          for (var iI = 0; iI < result.rows.length; iI++) {
            var row = result.rows.item(iI);

            /* Add record data to document here */
            trn.executeSql(
              'SELECT * FROM detail table WHERE id = ?',
              [ row.id ],
              function (trn,rslt) {
                /* Add detail info to document */
                for (var iTmp = 0; iTmp < rslt.rows.length; iTmp++) {
                  var tmpRow = rslt.rows.item(iTmp);
                  /* update document */
                }
              },
              errorHandler
            );
          }
        },
        errorHandler
      );
    }
  );
}

我需要從客戶端數據庫中獲取信息,並使用它來填充文檔。 我可以遍歷表的記錄,我很好。 但是,當我嘗試執行另一個數據庫查詢以獲取每個記錄的詳細信息時,javascript會異步執行內部查詢。 我看了其他問題,但對於如何完成此任務我還是有些困惑。 在上面的代碼中,嵌套的executeSql是異步處理的。 詳細信息永遠不會出現在文檔中。 有沒有一種方法可以將每個記錄的詳細信息獲取到它所屬的文檔中?

我不確定問題是什么? 如果問題是什么都沒有回來,請使用console.log查看是否有數據出來。 該問題可能是由於您引用了正在更新的DOM。 如果問題是按特定順序獲取請求,請閱讀以下內容。

遞延對象

很高興看到您是否擁有可用的框架。 由於您是在循環中發出AJAX請求,因此您需要一些東西來同步那些請求,因為您不知道它們將以什么順序返回。 例如,

 requestRows ->

   rows.each ->

     ajax call -> //These return in any order

如果您堅持要執行此框架,請隨意查看延遲的對象,並准備做很多工作。 否則,如果您使用dojo,請使用http://dojotoolkit.org/reference-guide/dojo/Deferred.html或jQuery,我已編寫了以下代碼: https : //gist.github.com/1219564

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM