Uso corretto della promessa Bluebird

1

Questo è legato a questa domanda sulle prestazioni promettenti . La risposta top corrente afferma che l'utilizzo di new Promise è

an anti-pattern in bluebird

E invece dovrebbe essere usato promisify . Comprendo che promisify può essere utilizzato per le funzioni che utilizzano i callback. Ma se ho il mio codice personale, voglio ottenere una promessa da come dovrebbe essere fatto?

Ad esempio, al momento ho una funzione che esegue una chiamata di riposo e io uso:

return new Promise(function (resolve, reject) {
    ...
    resolve(data);
    ...
    reject(err);
}

Posso quindi usarlo con il normale .then() . Quindi questo è corretto per ES6, ma se si esegue il modo in cui bluebird intende qual è l'implementazione corretta per essere il più efficiente possibile? Poiché penso che prendere il mio codice e cambiarlo per essere gestito con i callback semplicemente per usare promisify sembra un po 'matto. Potenzialmente potrei avere la parte sbagliata del bastone.

    
posta Tedd 14.04.2015 - 11:41
fonte

1 risposta

2

Questa domanda probabilmente non appartiene ai programmatori ma

var request = function() {
    return new Promise(function(resolve, reject) {
      ...
      resolve(data);
      ...
      reject(err);
    }
};

Ovviamente è molto più lento di

var request = promisify(function(callback) {
    ...
    callback(null, data);
    ...
    callback(err);
});

Tuttavia, questo non è l'anti-pattern. L'anti-pattern utilizza new Promise quando sarebbe sufficiente promisify o .then() . Ad esempio, qui è molto probabile che la richiesta sia solo usando alcune altre API già implementate come callback / promesse. Quindi new Promise è un anti-pattern perché dovresti semplicemente concatenare la promessa esistente o promettere l'API di callback e quindi concatenare le promesse restituite.

    
risposta data 14.04.2015 - 12:44
fonte

Leggi altre domande sui tag