Node.js
Terugbellen om te beloven
Zoeken…
Terugbellen beloven
Callback-based:
db.notification.email.find({subject: 'promisify callback'}, (error, result) => {
if (error) {
console.log(error);
}
// normal code here
});
Dit gebruikt de methode promisifyAll van bluebird om te beloven wat conventioneel op callback gebaseerde code is zoals hierboven. bluebird maakt een beloofde versie van alle methoden in het object, aan die op belofte gebaseerde methoden heeft Async toegevoegd:
let email = bluebird.promisifyAll(db.notification.email);
email.findAsync({subject: 'promisify callback'}).then(result => {
// normal code here
})
.catch(console.error);
Als alleen specifieke methoden moeten worden beloofd, gebruik dan gewoon de belofte:
let find = bluebird.promisify(db.notification.email.find);
find({locationId: 168}).then(result => {
// normal code here
});
.catch(console.error);
Er zijn enkele bibliotheken (bijvoorbeeld MassiveJS) die niet kunnen worden beloofd als het directe object van de methode niet wordt doorgegeven aan de tweede parameter. In dat geval geeft u gewoon het directe object van de methode door dat moet worden beloofd op de tweede parameter en wordt het ingesloten in contexteigenschap.
let find = bluebird.promisify(db.notification.email.find, { context: db.notification.email });
find({locationId: 168}).then(result => {
// normal code here
});
.catch(console.error);
Handmatig een callback beloven
Soms kan het nodig zijn om handmatig een callback-functie te beloven. Dit kan het geval zijn wanneer de callback niet het standaard error-first formaat volgt of als extra logica nodig is om te beloven:
Voorbeeld met fs.exists (pad, 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 beloofd
function wait(ms) {
return new Promise(function (resolve, reject) {
setTimeout(resolve, ms)
})
}