2016-07-25 9 views
0

Ich habe eine Steuerung, die zwei $ Ressourcenaufrufe gegen zwei REST-Dienste macht, wobei das Ergebnis der ersten als Eingabe von der zweiten verwendet wird.Sequenziell ngresource Aufrufe

Hier ist der Code:

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); 
 
}

Funktion 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 
 

 
      }); 
 
     }

Funktion 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; 
 
      }); 
 
     }

Der Fehler ist, daß der erste Anruf sequenziell nicht behoben ist, so dass die zweite keinen Eingang hat.

Gibt es die Möglichkeit, diese zwei Anrufe sequenziell zu führen, um auf den zweiten Anruf die Eingabe vom ersten zu warten?

Vielen Dank.

+0

Wenn Sie das Ende einer Aktion warten wollen ein zweites auszuführen, Sie dann sollte Promises verwenden. – Yoann

+0

@Yoann kannst du bitte ein Beispiel machen? –

Antwort

0

Ich bin nicht vertraut mit ngresource, aber Sie können etwas wie das versuchen.

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); 
 
       }); 
 
      }) 
 
     }

Weitere Informationen zu Versprechen hier: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

Verwandte Themen