我在解决回调如何工作方面遇到了一些问题。 我正在编写一个必须验证用户输入的函数。 在函数内部,我必须对我的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调用结束?
提前致谢:)
答案 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调用的最佳方式。你的组件的功能。