2017-03-08 19 views
0

私は、コールサービスの角度コントローラのメソッドを持っています。このメソッドはサービス応答に基づいて動作する必要があります。angularjsコントローラ内のシーケンシャル実行

しかし、私はなぜ適切な時間にメソッド呼び出しを知らない。

$scope.UpdateSelected = function() { 
 
    $rootScope.showConfirmModal().result.then(function() { 
 
     var selectedItems = _.filter($scope.Options, { Selected: true }); 
 
     var error = 0 
 

 
     for (var i = 0 ; i < selectedItems.length; i++) { 
 
      InvalidOptionsFactory.UpdateOptions(selectedItems[i].Id).then(function (res) { 
 
       if (res.data.error) { 
 
        error++; 
 
       } 
 
      }); 
 
     } 
 
      if (error == 0) { 
 
       toastr.success($rootScope.GetString('GENERIC_SAVE_SUCCSS_MSG')); 
 
      } 
 

 
      else if (error == selectedItems.length) { 
 
       $rootScope.showMessageModal($rootScope.GetString('UPDATE_STATUS_FAILED'), 'sm'); 
 
      } 
 
      else { 
 
       var message = hasError + $rootScope.GetString('UPDATE_STATUS_PARTIALLY_FAILED'); 
 
       toastr.success(message); 
 
      } 
 
      fetchSearchedData(); 
 
    }); 
 
    };

私は今、なぜそれが直接、if文に進んだとInvalidOptionsFactory.UpdateOptions(selectedItems[i].Id)メソッドが非同期であるため、それがサービス

+0

特定して下さい。そして、if条件を責めないでください。コードを最初にデバッグしてください。 –

+0

私は尋ねる前にコードをデバッグしていますが、それは連続して実行されません – user7157121

+0

あなたのコードは有効ではなく、中かっこがいくつかありません – phuzi

答えて

1

を呼び出し、それを実行しません。それはサービスが呼び出すのを待たずに、if (error == 0)ステートメントを最初に実行する(証明のためには下のスニペットを参照)。ここでは、非同期メソッドを学ぶ:https://www.pluralsight.com/guides/front-end-javascript/introduction-to-asynchronous-javascript

をあなたはこの(P.S.私はprepocessorとしてバベルを使用)のようなものにあなたのコードを作ることができます。

$scope.UpdateSelected = function() { 
    $rootScope.showConfirmModal().result.then(function() { 
    var selectedItems = _.filter($scope.Options, { Selected: true }); 
    checkForError(selectedItems).then(error => { 
     if (error == 0) { 
     toastr.success($rootScope.GetString('GENERIC_SAVE_SUCCSS_MSG')); 
     } else if (error == selectedItems.length) { 
     $rootScope.showMessageModal($rootScope.GetString('UPDATE_STATUS_FAILED'), 'sm'); 
     } else { 
     var message = hasError + $rootScope.GetString('UPDATE_STATUS_PARTIALLY_FAILED'); 
     toastr.success(message); 
     }; 

     fetchSearchedData(); 
    }); 
    }); 
}; 

function checkForError(selectedItems): Promise<number> { 
    return new Promise(resolve => { 
    var error = 0; 
    for (var i = 0 ; i < selectedItems.length; i++) { 
     InvalidOptionsFactory.UpdateOptions(selectedItems[i].Id).then(function (res) { 
     if (res.data.error) { 
      error++; 
     }; 
     }); 
    }; 

    resolve(error); 
    }); 
} 

function asyncFunc(): Promise<void> { 
 
    return new Promise(resolve => { 
 
    console.log("this is async"); 
 
    resolve(); 
 
    }); 
 
} 
 

 
asyncFunc().then(() => { 
 
    console.log("async function ended"); 
 
}); 
 

 
console.log("this will be called before async function ended");

関連する問題