2017-10-09 6 views
0

que je fais:(Bluebird .tap) ne peut pas renvoyer des données, faire mal

return new bluebird((resolve) => { 
 

 
    bluebird.resolve() 
 
    .tap(saveExcelFiles) 
 
    .tap(...) 
 
    .tap(() => { 
 
     return getZip().then((rows) => { 
 
     resolve(rows) // this outer bluebird helps me 
 
     return rows; 
 
     }); 
 
    }) 
 
    ; 
 
    
 
});

Comment retourner les données (pour chaque robinet) ou tout simplement dernier dans une enveloppe robinet Bluebird .

P.S. J'ai besoin séquençage (un par un, appuyez sur par robinet)

+0

@alexmac, pourriez-vous améliorer certains exemples de pls? – aaaaaaaaax10

+0

Évitez le ['anti-modèle de constructeur' 'Promise'] (https://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it)! – Bergi

Répondre

2

.tap signifie explicitement « ignorer la valeur de retour », si vous avez besoin de la valeur de retour - utiliser le .then standard:

.then(() => { 
    return getZip().then((rows) => { 
    // Nothing outer. 
    return rows; 
    }); 
}); 

Ou plus compacte:

.then(getZip); // that's it! 

en outre, vous devez return la chaîne de promesse au lieu de explicit construction:

return saveExcelFiles().tap(...).then(getZip); 

Devrait suffire pour l'ensemble du corps de votre fonction.