У меня есть простая цепочка событий:
- Получить столбцы из таблицы metaData (async)
- загрузить выбранные столбцы (async)
- список рендеринга
Я использовал целую цепочку этих функций, каждый из которых вызывал следующую, когда она была завершена. Однако его не очень очевидно, что происходит (вызов getColumnsFromMeta
приводит к заполнению вида). Поэтому в интересах ясности и повторного использования кода я хотел бы реорганизовать их с помощью JQuery
Promises
. Раньше я использовал 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();
};