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)
    })
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow