2011-06-19 54 views
0

我有一个问题。我正在查询数据库并查看数据库中的每个结果。数据库有2列名称和时间。现在我想要的JavaScript是显示该名称的数据库中保存的时间量。我试图用setTimeout()来做到这一点。暂停JavaScript数据库查询,直到setTimeout完成

之后,从数据库中选择:

function (transaction, result) { 
for (var i = 0; i < result.rows.length; i++) { 
    var row = result.rows.item(i); 
    $('div.box').html(row.name); 
    var countdown; 
    var countdown_number; 
    countdown_init(); 

    function countdown_init() { 
     countdown_number = 11; 
     countdown_trigger(); 
    } 

    function countdown_trigger() { 
     if (countdown_number > 0) { 
      countdown_number--; 
      document.getElementById('countdown_text').innerHTML = countdown_number; 
      if (countdown_number > 0) { 
       countdown = setTimeout('countdown_trigger()', row.time); 
      } 
     } 
    } 

} 

}

现在,我在这里的问题是,我相信,凭借在JavaScript线程做(但我可能是错的)。当倒计时开始时,它不会暂停循环的执行,而是在新线程上开始倒计时,并在循环中进行,引发下一个数据库条目并崩溃出现各种错误。

那么我如何解决这个问题?我曾考虑添加标志..但我不知道这是如何工作的。我有一种感觉(我希望)有一个直接的答案,但不知道它是什么。

+0

首先出来,你有无与伦比的parenthesises,并在第三行,你需要方括号,比如'result.rows.item [I]'。现在,你想把你的文字放在哪里?你能提供一些HTML标记,并描述你想做什么?另外,你有像jQuery这样的框架吗? – Betamos

回答

1

尝试

function (transaction, result) { 
for (var i = 0; i < result.rows.length; i++) { 
    var row = result.rows.item(i); 
    $('div.box').html(row.name); 
    var countdown; 
    var countdown_number; 
    countdown_init(); 

    function countdown_init() { 
     countdown_number = 11; 
     countdown_trigger(); 
    } 

    function countdown_trigger() { 
     if (countdown_number > 0) { 
      countdown_number--; 
      document.getElementById('countdown_text').innerHTML = countdown_number; 
      if (countdown_number > 0) { 
       countdown = setTimeout(function(){countdown_trigger();}, row.time); 
      } 
     } 
    } 

} 
} 
+0

非常感谢,是的,对不起,我和你的代码示例是非常草率的,因为你和其他评论者指出,是的,这确实修复了它,但是在setTimeout运行时不能暂停数据库循环的潜在问题仍然存在 – toast

相关问题