2016-09-07 24 views
0

Quickbooks APIに接続し、従業員の情報をダウンロードしてローカルデータベースに保存しています。私はこれを達成するためにangularjs、webapiを使用しています。私は情報をデータベースに保存しているときに次のエラーが発生しています。私は、すべての関数が非同期で待機しているのを見る。私はこのエラーが表示されている理由を助けてください。別の操作が保留中に非同期モジュールが完了しました

エラー:非同期処理がまだ保留している間に完了「/」Application.An非同期モジュールまたはハンドラ内

サーバーエラーが発生しました。

var candidate = await CandidateLoginBL.AddCandidateByEmployeeAsync(new CandidateLoginBO() 
         { 
          FirstName = e.GivenName, 
          MiddleName = e.MiddleName, 
          LastName = e.FamilyName 
      }); 
         } 
        }); 

完全な流れは以下の通りである:

JS:

QuickbookModule.factory('QuickbookService', ['$http', function ($http) { 

    return { 
getQuickbooksSync: function() { 
      return $http({ 
       url: '/api/QuickbookService/syncQuickbooks', 
       method: 'GET', 
       params: { IdCompany: sessionStorage.CID } 
      }); 
     } 

APIコントローラー:

問題は、コードの下に貼り付け部分で起こっています

[HttpGet] 
     [Route("syncQuickbooks")] 
     public async Task<IHttpActionResult> syncQuickbooks(int IdCompany) 
     { 
      var result = await QuickbooksBL.FullQuickbooksSync(IdCompany); 
      return Ok(result); 
     } 

QuickbooksBL:

 public static async Task<List<IncompleteEmp>> FullQuickbooksSync(int IdCompany) 
      {return await SyncronizeEmps(IdCompany); } 

     public static async Task<List<IncompleteEmp>> SyncronizeEmps(int companyId) 
      {     
        ......  
        List<EmployeeBO> empList = new List<EmployeeBO>(); 
        await AddToHumanEfits(companyId, inQBEmpsInfo);      ....  
       } 
          return IncompleteEmps; 
      } 


     public static async Task AddToHumanEfits(int companyId, List<EmployeeQbOnlineBO> qbEmpsList) 
      {     
        .... 
        qbEmpsList.ForEach(async e => 
        { 

          // Add a record into Candidate Login. 

         var candidate = await CandidateLoginBL.AddCandidateByEmployeeAsync(new CandidateLoginBO() 
         { 
          FirstName = e.GivenName, 
          MiddleName = e.MiddleName, 
          LastName = e.FamilyName    }); 
         } 
        });  
      } 

CandidateContactBL:

public static async Task<CandidateLoginBO> AddCandidateByEmployeeAsync(CandidateLoginBO model) 
     { 
      return await CandidateLoginDAL.AddCandidateByEmployeeAsync(model); 
     } 

CandidateContactDAL:

public static async Task<CandidateLoginBO> AddCandidateByEmployeeAsync(CandidateLoginBO model) 
     { 
      CandidateLoginBO candidate = new CandidateLoginBO(); 

       candidate = await GetByUserNameAsync(new CandidateLoginBO() { Email = model.Email });      candidate = await AddEmployeeAsync(model);     
      return candidate; 
     } 
+0

あなたは小さなコード例に問題を絞り込むことができませんか? –

+0

//候補のログインにレコードを追加する際に問題が発生しています。セクション。フルフローを表示するコードを追加します。 –

+4

他のコードはなぜ必要なのですか?問題がまだ残っている最小限のコードスニペットが表示されるまで元に戻します。 –

答えて

4

エラーこの種のは、一般async voidによって引き起こされます。そして、私はここ1を参照してください。

qbEmpsList.ForEach(async e => 
{ 
    ... 
}); 

あなたが定期的にforeachにこれを行うために、おそらくたいと思います:

foreach (var e in qbEmpsList) 
{ 
    ... 
} 
関連する問題