2017-06-28 5 views
0

Ich möchte einige API aufrufen, wenn der Status 'bereit' ist und dann nur einmal nach dem löst ich einige Anweisungen ausführen möchten.Umgang mit bedingten Angular Promises

Wenn der Status nicht ready ist Ich möchte nicht die API-Aufruf, wird aber weiterhin die Anweisungen ausführen.

ich es so gemacht haben:

if(job.status === 'ready') 
    //Makes a promise to fetch the progress API details for ready batches only 
    var promise = HttpWrapper.send('/api/jobs/'+job.job_id+'/getDetails', { "operation": 'GET' }); 

//Once the promise is resolved, proceed with rest of the items 
$q.all([promise]) 
.then(function(result) { 
    //Because for not ready batches promise object and it's response wuld be undefined 
    if(result[0] !== undefined){ 
     //Create a property that would hold the progress detail for ready batches 
     job.pct = result[0].pct; 
    } 

    //Want to execute these lines no matter what 
    vm.job = job; 
    vm.loading = false; 

Ich weiß, dass ich ein paar schlechte mache hier Codierpraktiken.

Ich brauche möglicherweise nicht $q.all überhaupt.

Aber ich kann nicht herausfinden, wie die Situation in den Griff - weil die letzten 2 Zeilen

ausgeführt würden

For ready batches within then only after that promise resolves, but for other batches there is no promise. So they can get executed quickly.

Wie kann ich sie effektiv schreiben, so dass sowohl die Situationen behandelt werden?

+0

Sie benötigen einen anderen Block mit den letzten 2 Zeilen. –

+0

@DeepthiS Ich möchte, dass sie auch für if block ausführen. – StrugglingCoder

Antwort

0

Dies sollte funktionieren, für die Zeilen auszuführen, obwohl ich empfehle, den .finally Block zu versuchen. Sie können den Jobstatus überprüfen und dann die Jobdetails aufrufen.

if (job.status === 'ready') { 
    getJobDetails(job); 
} else { 
    defaults(job); 
} 

function getJobDetails(job) { 
    return $http.get('/api/jobs/' + job.job_id + '/getDetails') 
    .then(function(resp) { 
     if (resp) { 
     job.pct = result[0].pct; 
     } 
    }) 
    .catch(funcition(error) { 
     console.log(error); 
    }) 
    .finally(function() { 
     vm.job = job; 
     vm.loading = false; 
    }); 
} 

function defaults(job) { 
    vm.job = job; 
    vm.loading = false; 
} 
+0

Was passiert, wenn der Status nicht bereit ist? Es wird nicht immer aufgerufen. Ich meine die getJobDetails Methode. – StrugglingCoder

+0

richtig, wenn nicht bereit dann wird es nie aufgerufen werden. – alphapilgrim

+0

Ich möchte dann auch anrufen. Nur dass es sofort innerhalb eines Versprechens genannt wird. – StrugglingCoder