gpt4 book ai didi

javascript - 将 WebSQL 与 async.js 一起使用,导致 InvalidStateError

转载 作者:行者123 更新时间:2023-11-30 17:43:55 24 4
gpt4 key购买 nike

我正在尝试将 WebSQL API 与 async.js 结合使用,以使其更易于使用。我使用 async.waterfall() 方法将事务对象从一个函数传递到另一个函数。这是一个简单的例子:

async.waterfall([function(callback) {
db.transaction(function(tx) {
callback(null, tx);
}, onError);

}, function(tx, callback) {
tx.executeSql('SELECT * FROM sqlite_master', [], function(tx, rs) {
callback(null, tx, rs);
}, onError);

}], function(tx, rs) {
// do something with rs.rows

});

当我调用 tx.executeSql() 时,Chrome 的控制台显示:Uncaught InvalidStateError: 试图使用一个不可用或不再可用的对象。
这很可能指的是 tx 对象。

以传统方式(创建“函数瀑布”)使用 WebSQL 效果很好。以这种方式使用 WebSQL 有什么需要注意的地方吗?或者有更好的选择吗?

最佳答案

好的,我发现 WebSQL 出于某种原因不能与 async.waterfall() 一起使用。以下代码使用 async.series(),运行良好。此外,当您将函数 transaction() 包裹在 waterfall() 中时,它也不起作用。

不过,waterfall() 在某些情况下会很好...

transaction() 中使用 series() 的工作示例:

db.transaction(function(tx) {
async.series([
function(callback) {
tx.executeSql('DROP TABLE IF EXISTS colors', [],
function(tx, rs) { callback(null, rs); },
function(err) { callback(err); });
},
function(callback) {
tx.executeSql('CREATE TABLE IF NOT EXISTS colors (name, red, green, blue)', [],
function(tx, rs) { callback(null, rs); },
function(err) { callback(err); });
},
function(callback) {
tx.executeSql('INSERT INTO colors VALUES ("red", 255, 0, 0)', [],
function(tx, rs) { callback(null, rs); },
function(err) { callback(err); });
},
function(callback) {
tx.executeSql('SELECT * FROM colors', [],
function(tx, rs) { callback(null, rs); },
function(err) { callback(err); });
}
],
function(err, results) {
if (!!err) { onError(err); }

console.debug(results[3].rows.item(0));
});
});

关于javascript - 将 WebSQL 与 async.js 一起使用,导致 InvalidStateError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20498809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com