Lorsque vous travaillez avec les promesses Bluebird dans Bookshelf, les développeurs ont souvent utilisez un modèle similaire à celui ci-dessous :
var getEvents = function(participantId) { return new models.Participant() .query({where: {id: participantId}}) .fetch({withRelated: ['events'], require: true}) .then(function(model) { return model; }); };
Cependant, ce code soulève des questions pour ceux qui ne sont pas familiers avec les promesses. La fonction then a-t-elle un impact significatif sur le comportement global du code ? L'implémentation suivante pourrait-elle obtenir le même résultat sans elle ?
var getEvents = function(participantId) { return new models.Participant() .query({where: {id: participantId}}) .fetch({withRelated: ['events'], require: true}); };
Le nœud du problème réside dans le paramètre de fonction transmis à then. Cet argument est censé recevoir la valeur de retour de la promesse précédente dans la chaîne. Ainsi, il apparaît que le retour a ; La déclaration dans la fonction then est essentiellement sans opération, car elle passe simplement par l'argument reçu inchangé.
Malgré son apparente redondance, la fonction then sert un objectif dans certains cas d’utilisation. Un exemple est lorsque la promesse renvoyée doit être traitée différemment tout au long de la chaîne. Par exemple, il peut être enregistré, converti en JSON ou géré de manière personnalisée. Un autre avantage est que la fonction then permet la gestion des erreurs, bien que cela puisse également être réalisé via done, en fonction de la bibliothèque de promesses utilisée.
En général, il est conseillé de uniquement utilisez-le lorsque cela est réellement nécessaire. Des fonctions inutiles peuvent alors ajouter une complexité inutile à la base de code et augmenter le risque d'erreurs. En règle générale, n'incorporez alors que lorsque le résultat ou l'erreur de la promesse renvoyée doit être explicitement modifié ou traité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!