2016-07-25 88 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

如果你想等待一個動作結束時執行第二個,那麼你應該使用Promises。 – Yoann

+0

@Yannn你能舉個例子嗎? –

回答

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