Javascript 处理延迟异步回调的典型方法
我不熟悉使用Javascript开发web应用程序 由于Javascript应用程序看起来是高度异步的,我想知道是否有一种通用的方法来处理调用太晚的回调。 例如,假设发出了异步请求,当响应最终返回时,应用程序处于不同的状态,最终不适合处理响应 如果响应成功或出现错误,您将如何检测并处理这种情况?这个问题可以从高层架构的角度来解决,还是解决方案总是与JS框架和/或应用程序类型相关联 在相关问题中,是否建议web应用程序在服务器端处理时阻止输入Javascript 处理延迟异步回调的典型方法,javascript,angularjs,asynchronous,q,winjs,rsvp,promise,Javascript,Angularjs,Asynchronous,Q,Winjs,Rsvp,Promise,我不熟悉使用Javascript开发web应用程序 由于Javascript应用程序看起来是高度异步的,我想知道是否有一种通用的方法来处理调用太晚的回调。 例如,假设发出了异步请求,当响应最终返回时,应用程序处于不同的状态,最终不适合处理响应 如果响应成功或出现错误,您将如何检测并处理这种情况?这个问题可以从高层架构的角度来解决,还是解决方案总是与JS框架和/或应用程序类型相关联 在相关问题中,是否建议web应用程序在服务器端处理时阻止输入 谢谢你在angularJS中,你可以使用$q.defe
谢谢你在angularJS中,你可以使用
$q.defer()
,resolve()
,拒绝()
和承诺
,例如:
MyObject.myMethod = function(options){
var deferred = $q.defer();
myAsyncMethod(options, function(callback_data){
deferred.resolve(callback_data);
});
return deferred.promise;
};
然后在代码中的其他地方:
var foo = New MyObject();
foo.myMethod(options).then(function(callback_data){
// process callback here;
});
对你的问题的快速回答是一个承诺 承诺是一种可能很快就会实现的模式,但目前通过您自己的自定义代码或使用Kris Kowal的q(见下文)等库来实现 模式相当简单。您的目标是包装异步执行的方法或函数,以保留其作用域,然后对其返回执行操作。对于大多数库和方法,这称为then语句 一个简单的例子: 其思想是,
goGetMeSomething()
返回一个“Promise对象”,该对象具有一个方法,然后在goGetMeSomething成功执行时执行。还可以通过捕获错误或从请求中读取故障响应代码来实现故障
一个失败的例子:
我建议您对承诺及其在不同库中的不同实现进行一些研究,以进一步理解。这也将帮助您找到最适合您的特定应用程序的方法
因此,在回顾您的问题时:
如果响应成功或出现错误,您将如何检测并处理这种情况?
- 承诺模式可能最有用
这个问题可以从高层架构的角度来解决,还是解决方案总是与JS框架和/或应用程序类型相关联?
- 这种解决方案可以在JavaScript中独立于任何框架实现。但是,如果您使用的是框架,那么它可能已经有了承诺模式。通常,实现框架提供的东西比使用其他东西更有用。正如所指出的,这是一个很好的例子。
在相关问题中,是否建议web应用程序在服务器端处理时阻止输入?
- 这有点超出范围。我建议您单独提问。
以下是一些图书馆参考资料:
- 问:
- RSVP:
- WinJS:
我不是建议你使用这些。这是你要去发现的。不过,希望这能帮助您看到模式,并让您自己做出决定
承诺模式是解决方案。
var theEventualResults;
goGetMeSomething().then(function(results) {
//now I can store the results in my working scope
theEventualResults = results;
});
var theEventualResults;
goGetMeSomething().then(function(results) {
//now I can store the results in my working scope
theEventualResults = results;
}).error(function(reason) {
//now I can handle the failure, if it fails;
});