r m*_*k r 1 c# async-await asp.net-web-api angularjs
我正在连接到 Quickbooks api,下载员工信息并将其保存到我的本地数据库。我正在使用 angularjs、webapi 来完成此操作。将信息保存到数据库时出现以下错误。我确实看到所有函数都有 async 和 await。有人可以帮助我为什么我收到这个错误。
错误 :
“/”应用程序中的服务器错误。异步模块或处理程序已完成,而异步操作仍处于挂起状态。
问题发生在下面粘贴的代码段中:
var candidate = await CandidateLoginBL.AddCandidateByEmployeeAsync(new CandidateLoginBO()
{
FirstName = e.GivenName,
MiddleName = e.MiddleName,
LastName = e.FamilyName
});
}
});
Run Code Online (Sandbox Code Playgroud)
完整流程如下:
js:
QuickbookModule.factory('QuickbookService', ['$http', function ($http) {
return {
getQuickbooksSync: function () {
return $http({
url: '/api/QuickbookService/syncQuickbooks',
method: 'GET',
params: { IdCompany: sessionStorage.CID }
});
}
Run Code Online (Sandbox Code Playgroud)
API控制器:
[HttpGet]
[Route("syncQuickbooks")]
public async Task<IHttpActionResult> syncQuickbooks(int IdCompany)
{
var result = await QuickbooksBL.FullQuickbooksSync(IdCompany);
return Ok(result);
}
Run Code Online (Sandbox Code Playgroud)
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 });
}
});
}
Run Code Online (Sandbox Code Playgroud)
候选人联系BL :
public static async Task<CandidateLoginBO> AddCandidateByEmployeeAsync(CandidateLoginBO model)
{
return await CandidateLoginDAL.AddCandidateByEmployeeAsync(model);
}
Run Code Online (Sandbox Code Playgroud)
候选人联系DAL :
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;
}
Run Code Online (Sandbox Code Playgroud)
这种错误通常是由async void. 我在这里看到一个:
qbEmpsList.ForEach(async e =>
{
...
});
Run Code Online (Sandbox Code Playgroud)
你可能想把它变成一个常规的foreach:
foreach (var e in qbEmpsList)
{
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
670 次 |
| 最近记录: |