等到回调结束后继续在Angular中执行

时间:2016-08-22 14:15:01

标签: javascript angularjs asynchronous callback asynccallback

我在解决回调如何工作方面遇到了一些问题。 我正在编写一个必须验证用户输入的函数。 在函数内部,我必须对我的API进行HTTP GET调用,以根据用户输入执行检查。

问题是从process函数调用了validate函数,并且在我在validate()中进行的HTTP调用之前调用了submit函数。 我无法编辑过程函数,因为它是其他组件使用的函数。

form.process = function(){
     // do stuffs
     validate();
     submit();
}

form.validate = function () {
    // lots of checks regarding the model
    ...
    // HTTP GET call
}

是否可以让submit函数等到validate()内的HTTP GET调用结束?

提前致谢:)

1 个答案:

答案 0 :(得分:2)

你必须修改validate以返回这样的承诺:

form.validate = function () {
    var deferred = $q.defer();
    // lots of checks regarding the model
    ...
    // In http GET call:
    // If success
    deferred.resolve(<any value>);
    // If errors
    deferred.reject(<any value>);
    // and now return the promise
    return deferred.promise;
}

现在你可以在这个过程函数中做任何你想做的事情:

form.process = function(){
   // do stuffs
   validate().then(function(response){
      submit();
   }, function(reject){
      // do something like showing error.
   });
}

如果你有更多的组件使用这个功能,你必须像这样编辑所有。 无论如何,这是在每个&#34;验证&#34;中实现其他GET调用的最佳方式。你的组件的功能。