0

2 つの REST サービスに対して 2 つの $resource 呼び出しを行うコントローラーがあり、最初の結果が 2 番目のサービスの入力として使用されます。

ここにコード:

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

エラーは、最初の呼び出しが順番に解決されないため、2 番目の呼び出しに入力がないことです。

最初の呼び出しからの入力を 2 番目の呼び出しで待機するために、これら 2 つの呼び出しを順番に実行する可能性はありますか?

どうもありがとう。

4

1 に答える 1

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

promise の詳細については、https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise をご覧ください。

于 2016-07-27T10:16:11.163 に答える