2017-10-11 9 views
1

Le problème que je rencontre est un peu difficile à expliquer, et je pourrais obtenir des promesses (angulaires) mal, mais toujours ...

J'essaie de gérer la situation suivante bien. En général, disons que je veux avoir mon Angular dialogService pour fournir une méthode confirm, qui renverrait une promesse résolue en cliquant sur le bouton yes, cela signifie que la confirmation a effectivement réussi. Cependant, je veux que le dialogue reste ouvert jusqu'à ce que l'opération interne async - qui serait exécutée sur la confirmation yes - se termine. Et si ça se termine avec succès, la boîte de dialogue devrait se fermer, sinon rester ouverte.

Dans le code qui serait (parfaitement) qui ressemble à ceci:

code externe:

dialogService.confirm('title', 'message').then => 
     return myLongLastingOperationReturningPromise() 

quelque chose de la mise en œuvre de la méthode confirm comme ceci:

def = $q.defer() 

    dialog = ngDialog.open(...) 
    // closePromise or any other custom local promise 
    dialog.closePromise.then => 
     // this is fake, but how can I achieve this? 
     result = def.resolve('closeRequest'); 
     if(typeof result.then == 'function') { 
      result.then => 
       // continue closing the dialog 
     } else if (result === false) { 
      // just do nothing 
     } else { 
      // closing the dialog 
     } 

en d'autres termes, est-il possible d'obtenir le résultat de la dernière méthode then dans la chaîne de promesses sur/après l'appel resolve?

Répondre

0

Vous devez exécuter la confirmation après le retour de l'API.

par exemple. bouton Cliquez sur «oui exécutera la méthode YesHandler:

//$scope is the ngDialog scope here 
$scope.YesHandler = function() { 
    myLongLastingOperationReturningPromise().then(function(data) { 
    //Execute confirm method after API returned 
    $scope.confirm(data); 
    }) 
} 

En appelant:

modalInstance = ngDialog.openConfirm({ 
        template: 'xxx.tpl.html', 
        scope: $scope, 
        controller: 'xxxCtrl' 
        }); 

modalInstance.then(function (data) { 
    //This data is returned from confirm 
}); 
+0

Salut, avez-vous vérifié cette réponse? –