【发布时间】:2011-06-28 17:11:51
【问题描述】:
异步回调很棒,但是当一个回调依赖于另一个回调的结果时,我会使用带有回调的 api 调用进行回调,依此类推。
apiCall(function () { apiCall(function () { apiCall(function () ...
我可以命名回调函数而不是内联它们。这看起来更漂亮,嵌套更少,但我觉得它更容易阅读。
这是一个例子。我需要查询本地sqlite数据库,使用结果查询服务器,然后使用响应更新本地数据库。
function sync() {
db.transaction(
function (transaction) {
execute(transaction, 'SELECT max(server_time) AS server_time FROM syncs;', [],
function (transaction, results) { // Query results callback
var t = results.rows.item(0).server_time;
$.post('sync.json', { last_sync_time: (t || '1980-01-01') },
function (data) { // Ajax callback
db.transaction(
function(transaction) {
$(data.thing).each(function () {
var thing = new Thing(this.thing);
thing.insert(transaction);
});
});
});
});
});
}
有没有办法解决这个问题(除了命名回调)?
【问题讨论】:
标签: javascript sqlite browser asynchronous