Comment renvoyer une valeur à partir d'une fonction javascript régulière qui contient une chaîne de promesses?

function bsfir() { Parse.Promise.as().then(function() { return Parse.Cloud.run('gRFI', {}); }).then(function(gRFIr) { return Parse.Cloud.run('gFI', { }); }).then(function(gFIR) { return gFIR; }, function(error) { return error; }); } Parse.Cloud.define("bSFI", function(request, response) { Parse.Promise.as().then(function() { return bsfir(); }).then(function(bsfirr) { response.success(bsfirr); }, function(error) { response.error("219 error: " + JSON.stringify( error)); }); }); 

Le but est d'avoir bsfir() compléter l'exécution (c'est-à-dire résoudre la promesse) avant de remettre l'exécution à l'appelant, dans ce cas, bSFI() .

L'appel de bSFI() entraîne l'exécution de quelques lignes de code dans bsfir() . L'exécution de bSFI() complète presque immédiatement / instantanément probablement parce que la promesse dans bsfir() n'est pas liée à une valeur de retour, alors lorsque bSFI() appelle bsfir() , l'exécution passe immédiatement à response.success(bsfirr);

Est-ce que l'utilisation de Promise.all() dans bsfir() une bonne solution?

Non, vous ne pouvez pas attendre la promesse de résoudre avant de revenir. Votre tâche est asynchrone, mais le return doit se produire immédiatement.

Mais ce que vous pouvez faire, c'est simplement renvoyer la promesse (de votre) lui-même, et permettre à votre interlocuteur de l'attendre. En fait, votre bSFI() déjà prometteur de toute façon, il est donc trivial de s'intégrer.

 function bsfir() { return Parse.Promise.as().then(function() { // ^^^^^^ return Parse.Cloud.run('gRFI', {}); }).then(function(gRFIr) { return Parse.Cloud.run('gFI', {}); }); } Parse.Cloud.define("bSFI", function(request, response) { Parse.Promise.as().then(bsfir).then(function(bsfirr) { response.success(bsfirr); }, function(error) { response.error("219 error: " + JSON.stringify( error)); }); }); 

Notez que vous devriez remplacer Parse.Promise.as().then(…) par just …() dans les deux fonctions.