おそらくreportDataService.getStandardReportGridData
は、約束を返します。それは非同期です。当然、非同期作業が完了するまで(たとえば、then
コールバック内)、ローディングフラグをクリアしたくはありません。
function getData() {
vm.wuDataLoading = true;
reportDataService.getStandardReportGridData(projectId, webreportIdWuSet).then(function(data3) {
vm.setRowWu01 = (formatNumber(data3.Values[0][1]));
vm.setRowWu02 = (formatNumber(data3.Values[0][2]));
})
// "finally"
.catch(e => {
// Do something about the fact the promise was rejected, but don't throw
// and don't return a rejected promise
})
.then(() => {
// Because our `catch` above converts the rejection to resolution, this gets
// called regardless of whether the original promise rejects or resolves
vm.wuDataLoading = false;
});
////some code <== This may or may not need to be in a callback above, depending on whether
// you want it to run before or after the work is complete
});
or I need to somehow ensure that vm.wuDataLoading is not changed to false before the data is fully loaded
他のものも同じフラグを使用しようとしている場合は、私が代わりにカウンターを使用してお勧めする:このような何か
function getData() {
// Increment the counter, where >0 means "loading"
++vm.wuDataLoading;
reportDataService.getStandardReportGridData(projectId, webreportIdWuSet).then(function(data3) {
vm.setRowWu01 = (formatNumber(data3.Values[0][1]));
vm.setRowWu02 = (formatNumber(data3.Values[0][2]));
})
// "finally"
.catch(e => {
// Do something about the fact the promise was rejected, but don't throw
// and don't return a rejected promise
})
.then(() => {
// Because our `catch` above converts the rejection to resolution, this gets
// called regardless of whether the original promise rejects or resolves
// Decrement the counter again
--vm.wuDataLoading;
});
////some code <== This may or may not need to be in a callback above, depending on whether
// you want it to run before or after the work is complete
});
注意だけであろうとgetData
のように、あなたが約束を呼び出しコードに渡すつもりがない場合は、上記のパターンを使用してください。 が(then
の呼び出し結果を返すことによって)行った場合、そのようなハンドブックを使用して拒否を解決に変換することは不適切です。
function getData() {
function cleanup() {
// Decrement the counter
--vm.wuDataLoading;
}
// Increment the counter, where >0 means "loading"
++vm.wuDataLoading;
return reportDataService.getStandardReportGridData(projectId, webreportIdWuSet).then(function(data3) {
vm.setRowWu01 = (formatNumber(data3.Values[0][1]));
vm.setRowWu02 = (formatNumber(data3.Values[0][2]));
cleanup();
})
.catch(e => {
cleanup();
throw e;
});
});
:その場合は
は、あなたが約束がローカル関数で(関係なく、どのように)安定すると実行して、あなたの
then
ハンドラおよびエラーを伝播
catch
ハンドラ内で両方を使用する任意のコードを分離します
ちょうど 'vm.wuDataLoading = false;'行を 'then'コールバックの中に入れます。 –
@NiettheDarkAbsol:約束が拒否すれば? –