Javascript 等待回调结束以继续执行

Javascript 等待回调结束以继续执行,javascript,angularjs,asynchronous,callback,asynccallback,Javascript,Angularjs,Asynchronous,Callback,Asynccallback,我在理解回调如何工作时遇到了一些问题。 我正在编写一个必须验证用户输入的函数。 在函数内部,我必须对API进行HTTP GET调用,以根据用户输入执行检查 问题在于,validate函数是从process函数调用的,submit函数是在我在validate()内部进行的HTTP调用之前调用的。 我无法编辑流程函数,因为它是其他组件使用的函数 form.process = function(){ // do stuffs validate(); submit(); }

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

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

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

form.validate = function () {
    // lots of checks regarding the model
    ...
    // HTTP GET call
}
是否可以让submit函数等待直到validate()内的HTTP GET调用结束


提前感谢:)

您必须修改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;
}
如果有更多的组件使用此功能,则必须像这样编辑所有组件。
无论如何,这是在组件的每个“验证”函数中实现其他GET调用的最佳方法。

您的
validate
函数是否返回任何
延迟的
承诺
?如果您无法编辑
进程
,您就倒霉了。HTTP请求总是异步的,因此
submit()
将在HTTP请求返回之前运行。(嗯,很明显,但这会让浏览器挂起。)我很困惑。。。为什么不能编辑流程函数?它在调用validate函数,因此即使其他组件正在使用process函数,它也在调用validate函数,如果这不起作用,那么当其他组件调用它时,它也不会起作用……这是没有意义的:)您的
process()
函数没有按您希望的方式工作,所以你必须改变它,这正是我所做的:)谢谢你的回答!
form.process = function(){
     // do stuffs
     validate();
     submit();
}

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