Ricerca…


Promuovere una richiamata

Richiamata a base di:

db.notification.email.find({subject: 'promisify callback'}, (error, result) => {
   if (error) {
       console.log(error);
   }

   // normal code here
});

Questo utilizza il promisifyAll metodo bluebird per promettere ciò che è convenzionalmente codice basato su callback come sopra. bluebird creerà una versione promettente di tutti i metodi nell'oggetto, i nomi dei metodi basati su promesse hanno accodati ad Async:

let email = bluebird.promisifyAll(db.notification.email);

email.findAsync({subject: 'promisify callback'}).then(result => {

    // normal code here
})
.catch(console.error);

Se solo i metodi specifici devono essere promessi, basta usare la sua promessa:

let find = bluebird.promisify(db.notification.email.find);

find({locationId: 168}).then(result => {
    
    // normal code here
});
.catch(console.error);

Ci sono alcune librerie (ad es., MassiveJS) che non possono essere promesse se l'oggetto immediato del metodo non viene passato sul secondo parametro. In tal caso, basta passare l'oggetto immediato del metodo che deve essere promesso sul secondo parametro e racchiuderlo nella proprietà context.

let find = bluebird.promisify(db.notification.email.find, { context: db.notification.email });

find({locationId: 168}).then(result => {

    // normal code here
});
.catch(console.error);

Promessa manuale di un callback

A volte potrebbe essere necessario promettere manualmente una funzione di callback. Potrebbe trattarsi di un caso in cui la richiamata non segue il formato standard di errore prima o se è necessaria una logica aggiuntiva per promettere:

Esempio con fs.exists (percorso, 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 promesso

function wait(ms) {
    return new Promise(function (resolve, reject) {
        setTimeout(resolve, ms)
    })
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow