AngularJS嵌套两个函数调用

时间:2017-02-27 12:39:11

标签: angularjs function asynchronous

我有一个通过调用函数validatePositions来验证startDate和endDate的函数,在初始化时我想调用这个函数,但有时endDate调用的返回速度比startDate快,这对我的情况是不正确的。

function validatePositions (date) {
    validatePositions (date)
            .then(function (response) {
               if (response.data) {
                  hideWarning();
               } else if (!warningShowed()) {
                  displayWarningMessage();
               }
    });
}

Init函数看起来像这样:

function init() {
        $q.all(validationService.validatePositions(startDate)).then(function () {
            wizardService.validatePositions(endDate);})

    }

如何嵌套此调用以使它们同时返回或首先启动调用然后调用endDate?

2 个答案:

答案 0 :(得分:0)

不要在您的服务中处理您的承诺,而是返回并在控制器中处理它。类似的东西:

function validatePositions (date) {
    return $resource(url, {date: date}).get()
}

然后在你的控制器中执行:

init(){
    validateService.validatePositions(startDate).$promise.then(
        function(success){
            if(success.data){
              //do somethig
              validateService.validatePositions(endDate).$promise.then(
                  function(success){
                     if(success.data){
                     //do somethig
                     }
                  }
              }
           }
        }
        function(error){
          //do something
        });

答案 1 :(得分:0)

你应该回报承诺。像下面一样更改您的代码。

function validatePositions (date) {
  return validatePositions(date).then(function (response) {                   
                  hideWarning();
           return response.data;
    }),function(error) {
         displayWarningMessage();
    });
   }