Comprendre le modèle de broyeur de promesses
Vous avez rencontré le modèle de broyeur de promesses dans votre code, mais son objectif reste insaisissable. Cet article vise à clarifier le concept et à démontrer son application.
Présentation du problème
Dans votre extrait de code :
function getDb() {
return myDbDriver.getConnection();
}
var users = getDb().then(function (conn) {
return conn.query("SELECT name FROM users").finally(function (users) {
conn.release();
});
});
Vous êtes confronté au problème de fuites potentielles de ressources si vous négligez de libérer la connexion à la base de données après chaque appel getDb. Cela peut entraîner le gel du système si les limites de ressources sont dépassées.
Présentation du modèle Disposer
Le modèle de broyeur de promesses établit un lien fort entre une portée de code et la ressource qu'il contient. possède. En liant la ressource à la portée, vous garantissez sa libération rapide une fois la portée terminée, éliminant ainsi le risque de surveillance. Ce modèle présente des similitudes avec l'utilisation de C#, Python avec, le try-with-resource de Java et le RAII de C.
Structure du modèle
Le modèle du broyeur suit un modèle spécifique structure :
withResource(function (resource) {
return fnThatDoesWorkWithResource(resource); // returns a promise
}).then(function (result) {
// resource disposed here
});
L'appliquer à votre code
En refactorisant votre code dans le modèle Disposer :
function withDb(work) {
var _db;
return myDbDriver.getConnection().then(function (db) {
_db = db; // keep reference
return work(db); // perform work on db
}).finally(function () {
if (_db) _db.release();
});
}
Vous pouvez maintenant réécrire votre code précédent comme :
withDb(function (conn) {
return conn.query("SELECT name FROM users");
}).then(function (users) {
// connection released here
});
Assurez-vous que la ressource est libérée dans le bloc final pour garantir une élimination appropriée.
Exemples concrets
Exemples notables de Le modèle de broyeur inclut en pratique Sequelize et Knex (le générateur de requêtes de Bookshelf). Ses applications s'étendent à la gestion de processus asynchrones complexes, tels que l'affichage et le masquage d'indicateurs de chargement basés sur l'achèvement de plusieurs requêtes AJAX.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3