2017-06-28 13 views
0

ステータスが「準備完了」であり、それが解決された後に一度だけいくつかのステートメントを実行したい場合は、API呼び出しを行いたいと思います。条件付き角度の処理を処理する

ステータスがreadyではない場合は、私はAPI呼び出しをしたくないのに、ステートメントを実行します。私はそれがこのようにそれを行っている

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; 

は、私はここにいくつかの悪いコーディングプラクティスを作っています知っています。

$q.allがまったく必要ない場合があります。

しかし、私は状況を処理する方法を見つけ出すことはできません - 最後の2行は、両方の状況が処理されるように、私はそれらを効果的に書くことができますどのように

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

を実行することになるため?

+0

最後の2行のelseブロックが必要です。 –

+0

@DeepthiSブロックする場合にも実行します。 – StrugglingCoder

答えて

0

.finallyブロックを試すことをおすすめします。ジョブの状態を確認し、ジョブの詳細機能を呼び出すことができます。

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

ステータスが準備完了でないとどうなりますか?それは今まで呼ばれていません。私はgetJobDetailsメソッドを意味します。 – StrugglingCoder

+0

が正しくない場合、それは決して呼び出されません。 – alphapilgrim

+0

私はまたそれを呼び出したいと思います。ただそれは約束の中ではなく、即座に呼び出されるでしょう。 – StrugglingCoder

関連する問題