我有事件的一個簡單鏈:鏈的jQuery少輝
- 獲取從元數據表中的列(異步)
- 負荷選中的列(異步)
- 渲染列表
我習慣了鏈式這些功能,每個功能完成後都會調用下一個功能。然而,它不是很明顯發生了什麼(在視圖中填入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();
};
感謝您的快速回復它很好!感謝這篇文章,它看起來不錯。作爲一個額外的問題:是否有可能將.done/.way等鏈接到不同階段的管道上? – JonWells 2012-07-18 10:56:43
@CrimsonChin:是的。 PS:給我一秒,jsfiddle將在一瞬間完成 – zerkms 2012-07-18 10:58:16
@CrimsonChin:是的,只要'pipe()'返回延遲,你也可以使用它們中的任何一個。 PS:我添加了jsfiddle示例 – zerkms 2012-07-18 11:03:09