2016-07-25 2 views
0

У меня есть контроллер, делающий два вызова $ ресурсов против двух служб REST, где результат первого используется как вход второго.Последовательные вызовы ngresource

Вот код:

if (requestLock == false) { 
 
    $scope.T_01_04_sharedData.tempRequestForT_01_04 = insertNewRequest("aggr_1", $rootScope.globals.currentUser.username, "", "temp", "2016-07-30 00:00:00"); 
 
    requestLock = true; 
 
} 
 

 
if (action == 'add') { 
 
    updateSelectedForRequest(prosumer, 'selected', $rootScope.globals.currentUser.username, $scope.T_01_04_sharedData.tempRequestForT_01_04); 
 
} else { 
 
    updateSelectedForRequest(prosumer, 'non-selected', $rootScope.globals.currentUser.username, $scope.T_01_04_sharedData.tempRequestForT_01_04); 
 
}

Функция updateSelectedForRequest

function updateSelectedForRequest(username, status, businessUser, request) { 
 
      WidgetService.T_01_04_updateSelectedForRequest.query({ 
 
       businessUser_id: businessUser, 
 
       request_id: request, 
 
       username: username, 
 
       status: status 
 
      }, function (result) { 
 
       // response handler 
 

 
      }); 
 
     }

Функция insertNewRequest

function insertNewRequest(bu_id_target, requester, description, status, validUntil) { 
 
      return WidgetService.T_01_04_insertNewRequest.query({ 
 
       bu_id_target: bu_id_target, 
 
       requester: requester, 
 
       description: description, 
 
       status: status, 
 
       validUntil: validUntil 
 

 
      }, function (result) { 
 

 
       $scope.T_01_04_sharedData.tempRequestForT_01_04 = result.request_id; 
 
       return result; 
 
      }); 
 
     }

Ошибка в том, что первый вызов не будет решена последовательно, так что вторая не имеет входа.

Есть ли возможность выполнять эти два вызова последовательно, чтобы дождаться второго вызова ввода от первого?

Большое спасибо.

+0

Если вы хотите ждать окончания действия, чтобы выполнить второе, то вы должны использовать обещания. – Yoann

+0

@Yoann вы можете сделать пример, пожалуйста? –

ответ

0

Я не знаком с ngresource, но вы можете попробовать что-то вроде этого.

if (requestLock == false) { 
 
    insertNewRequest("aggr_1", $rootScope.globals.currentUser.username, "", "temp", "2016-07-30 00:00:00") 
 
    .then(function(result){ 
 
     $scope.T_01_04_sharedData.tempRequestForT_01_04 = result; 
 

 
     if (action == 'add') { 
 
       updateSelectedForRequest(prosumer, 'selected', $rootScope.globals.currentUser.username, $scope.T_01_04_sharedData.tempRequestForT_01_04); 
 
     } else { 
 
       updateSelectedForRequest(prosumer, 'non-selected', $rootScope.globals.currentUser.username, $scope.T_01_04_sharedData.tempRequestForT_01_04); 
 
     } 
 
    }, function(error){/* manage error here */}); 
 

 
    requestLock = true; 
 
}

function insertNewRequest(bu_id_target, requester, description, status, validUntil) { 
 
      return new Promise(function(resolve, reject){ 
 
       PromiseWidgetService.T_01_04_insertNewRequest.query({ 
 
        bu_id_target: bu_id_target, 
 
        requester: requester, 
 
        description: description, 
 
        status: status, 
 
        validUntil: validUntil 
 

 
       }, function (result) { 
 

 
        $scope.T_01_04_sharedData.tempRequestForT_01_04 = result.request_id; 
 
        resolve(result); 
 
       }); 
 
      }) 
 
     }

более

информация о обещании здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

Смежные вопросы