【发布时间】:2012-07-17 09:13:13
【问题描述】:
我有一个简单的事件链:
- 从元数据表中获取列(异步)
- 加载选定的列(异步)
- 渲染列表
我过去只是链接这些函数,每个函数在完成后调用下一个函数。但是,发生了什么并不是很明显(调用getColumnsFromMeta 会导致视图被填充)。所以为了清晰和代码重用,我想用JQueryPromises重构这些。我以前使用过承诺。但是我如何链接两个以上? getColumnsFromMeta ().then(loadSourceFromDatabase /*some arguments*/) //.then(renderList)?;
这是getColumnsFromMeta 的示例:
var getColumnsFromMeta = function(id)
{
var sql,
dfd;
dfd = $.Deferred();
var onSuccess = function(tx, result)
{
var columns = [];
for (var i = 0; i < result.rows.length; i++)
{
columns.push(result.rows.item(i).Column);
}
dfd.resolve(columns);
};
var onError = function(tx, error)
{
dfd.reject(error);
};
sql = "SELECT Column FROM Meta WHERE id = ?";
database.query(sql, [id], onSuccess, onError);
return dfd.promise();
};
【问题讨论】:
标签: javascript jquery jquery-deferred promise jquery-chaining