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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow