异步回调很棒,但是当一个回调依赖于另一个回调的结果时,我会使用具有回调的 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);
});
});
});
});
});
}
有没有办法解决这个问题(除了命名回调之外)?
最佳答案
我认为您通过命名您的函数而不是内联编写它们来丢弃未嵌套的东西太快了。这几乎是清理困惑的唯一方法。
代替:
do_a(
function () {
// more nesting...
}
);
使用名称为每个函数提供一些清晰度和用途:
function on_a_complete() {
}
do_a(on_a_complete);
关于javascript - JavaScript 异步编程的新手。有什么建议吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5022883/