我有一个简单的事件链:
- 从元数据表中获取列(异步)
- 加载选定的列(异步)
- 渲染列表
我过去只是将这些函数链接起来,每个函数都在完成后调用下一个函数。但是,发生了什么并不是很明显(调用getColumnsFromMeta
结果是在填充视图)。因此,为了清晰和代码重用,我想使用JQuery
Promises
. 我以前使用过承诺。但是我如何链接两个以上?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();
};