【发布时间】:2018-03-21 09:00:14
【问题描述】:
我对 Javascript 中的异步代码感到很糟糕,现在已经卡在某事上一段时间了。
我正在使用 WebSql 并且刚刚完成数据库初始化步骤,但是其中一个循环没有按我期望的方式执行。
$(document).ready(function() {
initdatabase();
});
function initdatabase() {
var db = window.openDatabase("nothing", "1.0", "nothing", 2 * 1024 * 1024);
db.transaction(function(trans) {
trans.executeSql("CREATE TABLE", [], function(trans, result) {
// success
defaultdata(db);
}, function(error) {
// failed
});
});
}
function defaultdata(db) {
db.transaction(function(trans) {
var lo_data = [
{code:"CODE01", desc:"Code 01 Desc"},
{code:"CODE02", desc:"Code 02 Desc"},
{code:"CODE03", desc:"Code 03 Desc"}
];
for(i = 0; i < lo_data.length; i++) {
trans.executeSql("INSERT", [lo_data[i].code, lo_data[i].desc], function(trans, result) {
// success
console.log("INS : " + i);
}, function(error) {
// failed
});
}
console.log("END");
});
}
但是指示结束的日志在 for 循环完成之前执行。如果我尝试验证数据是否已插入,我总是会失败,因为循环尚未完成插入。
Google 表示应该使用 Promise 处理异步代码,但我找不到在这样的实例中使用 Promise 的示例。
任何帮助将不胜感激
【问题讨论】:
-
要遵循的步骤: 1.) 仔细阅读Promise 是什么。 2.) 想想你刚刚学到的东西如何应用到你当前的问题上。 3.) 执行代码更改。
-
我理解一般用途的承诺,一个函数将返回一个解析或拒绝,然后链接第二个函数,但循环将有多个解析
标签: javascript loops for-loop asynchronous