我的控制器包含一个函数,该函数使用从视图中收集的一些范围值对服务进行两个函数调用。

$scope.sendValues = function () {
    MyService.function1($scope.value1, $scope.value2);

    for(var i = 0; i < $scope.arr.length; i++) {
        $scope.value3 = $(".input" + i).val();
        MyService.function2($scope.value3);
    }
};


这两个服务功能都发出一个http请求,它们看起来类似于以下内容:

var tempID = 0;

var function1 = function (value1, value2) {
    return $http({
        method: 'POST',
        url: "someUrl",
        data: {
            valeu1: value1,
            value2: value2
        }
    }).success(function (response) {
        tempID = response.data.id;
    });
};


现在,第二个函数需要来自function1的值“ tempID”。

var function2 = function (value3) {
    return $http({
        method: 'POST',
        url: "anotherURL",
        data: {
            value3: value3,
            tempID: tempID
        }
   });
};


问题是,有时function2在function1完成之前运行,这导致tempID为声明值0。我如何确保function1在function2运行之前完成?我知道我可以将function2放到function1的成功/完成中,但是然后我如何获取在控制器函数中循环的视图值。

最佳答案

你可以利用诺言

var function1 = function (value1, value2) {
    return $http({
        method: 'POST',
        url: "someUrl",
        data: {
           valeu1: value1,
           value2: value2
       }
   }).then(function (response) {
       tempID = response.data.id;
       retrun tempID;
   });
};

var function2 = function (value3, tempID) {
return $http({
    method: 'POST',
    url: "anotherURL",
    data: {
        value3: value3,
        tempID: tempID
    }
 });
};


你会这样打电话

function1('some value1', 'some value2').then(function(id){
     function2('your value 3', id).then(function(resp){
          // whatever you want to do with this response
    });
});

关于javascript - 在function1完成后运行function2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38031245/

10-09 21:58