c # async - ожидание ToListAsync возвращает неопределенное - PullRequest
0 голосов
/ 04 января 2019
public async Task<JsonResult> getEmployee(int roleId)
{
    var emp = await db.tbl_employee.Where(e => e.roleId == roleId).ToListAsync();
    return Json(emp, JsonRequestBehavior.AllowGet);
}

Это действие возвращает неопределенное значение, но если я удаляю ожидание, как это

public async Task<JsonResult> getEmployee(int roleId)
{
    var emp = db.tbl_employee.Where(e => e.roleId == roleId).ToListAsync();
    return Json(emp, JsonRequestBehavior.AllowGet);
}

, оно возвращает желаемый результат.Я также пытался попробовать это из https://stackoverflow.com/a/25899982/9367841

public async Task<JsonResult> getEmployee(int roleId)
{
    var emp = await db.tbl_employee.Where(e => e.roleId == roleId).ToListAsync().ConfigureAwait(false);
    return Json(emp, JsonRequestBehavior.AllowGet);
}

, но это не работает.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Я наконец-то решил.

если вы используете это действие

public async Task<JsonResult> getEmployee(int roleId)
{
    var emp = db.tbl_employee.Where(e => e.roleId == roleId).ToListAsync();
    return Json(emp, JsonRequestBehavior.AllowGet);
}

// Я использую angularjs для получения данных с сервера

$http.post("../controller/getEmployee", { roleId: id }).then(function (r) {
      console.log(r.data);
})

результат будет таким (из console.log (r.data))

{Result: Array(1), Id: 50, Exception: null, Status: 5, IsCanceled: false, …}
AsyncState: null
CreationOptions: 0
Exception: null
Id: 50
IsCanceled: false
IsCompleted: true
IsFaulted: false
Result: [{…}]
Status: 5
__proto__: Object

, чтобы получить список сотрудников.вместо использования r.data используйте вместо этого r.data ["Result"].

$http.post("../controller/getEmployee", { roleId: id }).then(function (r) {
      $scope.list = r.data["Result"];
})

Но если вы используете это действие

public async Task<JsonResult> getEmployee(int roleId)
{
    var emp = await db.tbl_employee.Where(e => e.roleId == roleId).ToListAsync();
    return Json(emp, JsonRequestBehavior.AllowGet);
}

Вы можете получить список сотрудниковиспользуя r.data.

$http.post("../controller/getEmployee", { roleId: id }).then(function (r) {
      $scope.list = r.data;
})

Извините, я не показал, как я получаю данные, проблема была там, а не на стороне сервера.

0 голосов
/ 04 января 2019

Я думаю, что видел это раньше.Можете ли вы попробовать следующее, пожалуйста?

public JsonResult getEmployee(int roleId)
{
    var emp = await db.tbl_employee.Where(e => e.roleId == roleId).ToListAsync();
    return Json(emp, JsonRequestBehavior.AllowGet);
}

ToListAsync возвращает Task<>

edit см. Здесь: Это правильно, если я используюawait + ToListAsync () поверх IQueryable, который не определен как задача

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...