Suche…


Rückruf versprechen

Callback-basiert:

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

   // normal code here
});

Hierbei wird die promisifyAll-Methode von Bluebird verwendet, um zu versprechen, was herkömmlich auf Callback basierender Code wie oben beschrieben ist. bluebird wird eine Versprechungsversion aller Methoden im Objekt erstellen. An diese Versprechungsbasierten Methodennamen wurde Async angehängt:

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

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

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

Wenn nur bestimmte Methoden zugesagt werden müssen, verwenden Sie einfach das Versprechen:

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

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

Es gibt einige Bibliotheken (z. B. MassiveJS), die nicht angekündigt werden können, wenn das unmittelbare Objekt der Methode nicht an den zweiten Parameter übergeben wird. Übergeben Sie in diesem Fall einfach das unmittelbare Objekt der Methode, das für den zweiten Parameter angekündigt werden muss, und fügt es in die Kontexteigenschaft ein.

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

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

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

Einen Callback manuell versprechen

Manchmal ist es erforderlich, eine Callback-Funktion manuell zu veröffentlichen. Dies kann in einem Fall der Fall sein, in dem der Rückruf nicht dem Standard- Error-First-Format folgt oder wenn zusätzliche Logik erforderlich ist, um zu versprechen:

Beispiel mit fs.exists (Pfad, Rückruf) :

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 versprochen

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow