mam prosty łańcuch zdarzeń:Chain jQuery Promises
- Get kolumny z tabeli metadanych (asynchronicznej)
- obciążenia wybranych kolumn (asynchroniczny)
- renderowania lista
Używałem po prostu łańcucha tych funkcji, każde z nich wywoływało następne, gdy zostało zakończone. Jednak nie jest to bardzo oczywiste, co się dzieje (wywołanie getColumnsFromMeta
powoduje zapełnienie widoku). Dlatego w celu zachowania przejrzystości i ponownego użycia kodu chciałbym je poprawić za pomocą JQuery
Promises
. Używałem już obietnic. Ale w jaki sposób mogę połączyć więcej niż dwa? getColumnsFromMeta().then(loadSourceFromDatabase /*some arguments*/) //.then(renderList)?;
Oto przykład z 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();
};
Dzięki za szybką odpowiedź działa świetnie! I dzięki za artykuł, wygląda dobrze. Jako dodatkowe pytanie: czy można łączyć łańcuchy/etc, etc na rurze na różnych etapach? – JonWells
@CrimsonChin: tak. PS: daj mi sekundę, jsfiddle zostanie zrobione za chwilę – zerkms
@CrimsonChin: tak, możesz użyć dowolnego z nich, dopóki zwróci się również 'pipe()'. PS: Dodałem przykład jsfiddle – zerkms