我是使用 Javascript 开发 Web 应用程序的新手。
由于 Javascript 应用程序似乎高度异步工作,我想知道是否有一种通用方法来处理调用得太晚的回调。 例如,假设发出异步请求,当响应最终返回时,应用程序处于不同的状态,最终不适合处理响应。
如果响应成功或错误,您将如何检测这种情况并进行处理?这个问题可以从高层架构的 Angular 来解决吗?或者这种解决方案是否总是与 JS 框架和/或应用程序类型相关?
与此相关的是,在服务器端处理发生时,Web 应用程序是否建议采用阻止输入的模式?
谢谢
最佳答案
对您的问题的快速回答是 promise 。
Promise 是一种可能很快就会在 ECMA-6 中实现的模式,但是目前是通过您自己的自定义代码或使用 Kris Kowal 的 q 等库(见下文)来执行。
该模式相当简单。您的目标是包装异步执行的方法或函数,以保留其范围,然后对其返回进行操作。对于大多数库和方法,这称为 then 语句。
一个简单的例子:
var theEventualResults;
goGetMeSomething().then(function(results) {
//now I can store the results in my working scope
theEventualResults = results;
});
这个想法是,goGetMeSomething()
返回一个“Promise 对象”,该对象具有一个 then
方法,该方法在 goGetMeSomething 成功执行时执行。还有一些方法可以实现失败,通过捕获错误或从请求中读取失败响应代码。
失败示例:
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;
});
我建议您对 Promise 及其在不同库中的不同实现进行一些研究,以进一步加深您的理解。这也将帮助您找到最适合您的特定应用的方案。
因此,回顾您的问题:
- 如果响应成功或错误,您将如何检测这种情况并进行处理?
- promise 模式可能是最有用的
- 这个问题可以从高层架构的 Angular 解决吗?或者这种解决方案是否始终与 JS 框架和/或应用程序类型相关?
- 与此相关的是,Web 应用程序在服务器端处理时阻止输入是否是推荐模式?
- 这有点超出了范围。我建议在一个单独的问题中提出这个问题。
这里还有一些库引用:
- 问:https://github.com/kriskowal/q
- 回复:https://github.com/tildeio/rsvp.js
- WinJS:http://msdn.microsoft.com/en-us/library/windows/apps/br211867.aspx
我不建议您使用其中任何一个。这有待你去发现。不过,希望这可以帮助您了解其中的模式,并让您自己做出决定。
关于javascript - 处理延迟异步回调的典型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22300232/