Chaîne de promesses Jquery
J'ai une simple chaîne d'événements:
- Obtenir des Colonnes d'une table de métadonnées (async)
- charge colonnes sélectionnées (async)
- rendu liste
J'ai utilisé seulement à la chaîne de ces fonctions, chaque appel suivant, quand il a eu terminé. Cependant, ce n'est pas très évident que ce qui se passe (l'appel de getColumnsFromMeta
résultats dans la vue en cours peuplée). Donc, dans l'intérêt de la clarté et du code de la réutilisation je tiens à refactoriser à l'aide de JQuery
Promises
. J'ai utilisé des promesses avant. Mais comment je fais de la chaîne de plus de deux? getColumnsFromMeta ().then(loadSourceFromDatabase /*some arguments*/) //.then(renderList)?;
Voici un exemple de la 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();
};
source d'informationauteur JonWells
Vous devez vous connecter pour publier un commentaire.
Il devrait être quelque chose comme:
http://jsfiddle.net/zerkms/xYDbm/1/ - voici un exemple de travail
http://joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/ -- c'est l'article que j'aime vraiment à propos de promesses
zerkms réponse m'a aidé, après avoir réfléchi. Je vais poster ce que j'ai fait ici dans le cas d'un exemple avec plein contexte est utile.