Node.js
Rappel à la promesse
Recherche…
Promouvoir un rappel
Rappel basé sur:
db.notification.email.find({subject: 'promisify callback'}, (error, result) => {
if (error) {
console.log(error);
}
// normal code here
});
Ceci utilise la méthode promisifyAll de bluebird pour indiquer ce qui est classiquement un code basé sur le rappel comme ci-dessus. bluebird fera une version prometteuse de toutes les méthodes de l'objet, les noms des méthodes basées sur les promesses ont été ajoutés à Async:
let email = bluebird.promisifyAll(db.notification.email);
email.findAsync({subject: 'promisify callback'}).then(result => {
// normal code here
})
.catch(console.error);
Si seules des méthodes spécifiques doivent être promises, il suffit d'utiliser sa promesse:
let find = bluebird.promisify(db.notification.email.find);
find({locationId: 168}).then(result => {
// normal code here
});
.catch(console.error);
Certaines bibliothèques (par exemple, MassiveJS) ne peuvent pas être promises si l'objet immédiat de la méthode n'est pas transmis au second paramètre. Dans ce cas, il suffit de transmettre l'objet immédiat de la méthode qui doit être promis sur le deuxième paramètre et de le placer dans la propriété contextuelle.
let find = bluebird.promisify(db.notification.email.find, { context: db.notification.email });
find({locationId: 168}).then(result => {
// normal code here
});
.catch(console.error);
Promouvoir manuellement un rappel
Parfois, il peut être nécessaire de promouvoir manuellement une fonction de rappel. Cela pourrait être pour un cas où le rappel ne suit pas le format standard erreur-first ou si une logique supplémentaire est nécessaire pour indiquer:
Exemple avec fs.exists (path, callback) :
var fs = require('fs');
var existsAsync = function(path) {
return new Promise(function(resolve, reject) {
fs.exists(path, function(exists) {
// exists is a boolean
if (exists) {
// Resolve successfully
resolve();
} else {
// Reject with error
reject(new Error('path does not exist'));
}
});
});
// Use as a promise now
existsAsync('/path/to/some/file').then(function() {
console.log('file exists!');
}).catch(function(err) {
// file does not exist
console.error(err);
});
setTimeout promis
function wait(ms) {
return new Promise(function (resolve, reject) {
setTimeout(resolve, ms)
})
}