0

Est-il possible pour un module Framework sans serveur d'attendre la "résolution" d'une promesse avant de revenir?(Module Framework sans serveur) attendre la promesse de résoudre avant l'instruction de retour

Je suis conscient que se promet ne peut le faire, mais différents cadres/bibliothèques (express, Jasmine, hapijs, etc.) résoudre ce problème en ayant une méthode qui définit la date de retour. J'ai besoin de quelque chose comme ceci:

let http = require('http'), 
    Promise = require('bluebird'); 

let action = (done) => { 
    return new Promise((resolve, reject) => { 
    http 
     .get('http://domain.com', resolve.bind({}, 'all good!')) 
     .on('error', reject.bind({}, 'all wrong!')); 
    }) 
    .then((response) => { 
    console.log('Result', response); 
    return done(response); // <----------- I wan't to see this as the response 
          //    of the lambda function 
    }); 
}; 

module.exports.run = (event, context, cb) => cb(null, action(done)); 

Répondre

1

Non, les promesses ne font pas cela. Il est impossible de lire à partir du futur, et ne veut pas (ne peut pas) bloquer. Votre action est toujours asynchrone.

Mais étant donné que votre exportation prend un rappel de toute façon, vous pouvez simplement invoquer cette manière asynchrone:

module.exports.run = (event, context, cb) => { 
    action().then(res => cb(null, res), err=>cb(err)); 
}; 

Il serait préférable que bien sûr si vous venez de rentrer la promesse.

+0

Veuillez donner et exemple de retour d'une promesse. merci – elliotrock

+0

@elliotrock 'module.exports.run = (événement, contexte) => action();', de sorte qu'après l'importation, vous fassiez 'run (...) .then (...)' au lieu de passer un rappel – Bergi

+0

Intéressant J'ai utilisé Promises différées et dans le gestionnaire '' return yourPromise.then (nextPromise) .then (fonction (résultat) {cb (returnHttpFormattedResponse)}}) '' – elliotrock