javascript - 处理延迟异步回调的典型方法

标签 javascript angularjs asynchronous

我是使用 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 及其在不同库中的不同实现进行一些研究,以进一步加深您的理解。这也将帮助您找到最适合您的特定应用的方案。

因此,回顾您的问题:

  1. 如果响应成功或错误,您将如何检测这种情况并进行处理?
    • promise 模式可能是最有用的
  2. 这个问题可以从高层架构的 Angular 解决吗?或者这种解决方案是否始终与 JS 框架和/或应用程序类型相关?
    • 这种解决方案可以独立于任何框架在 JavaScript 中实现。但是,如果您使用的是框架,那么它可能已经有一个 promise 模式。实现框架提供的功能通常比使用其他功能更有用。 AngularJS就是一个很好的例子 Alex C指出。
  3. 与此相关的是,Web 应用程序在服务器端处理时阻止输入是否是推荐模式?
    • 这有点超出了范围。我建议在一个单独的问题中提出这个问题。

这里还有一些库引用:

我不建议您使用其中任何一个。这有待你去发现。不过,希望这可以帮助您了解其中的模式,并让您自己做出决定。

关于javascript - 处理延迟异步回调的典型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22300232/

相关文章:

javascript - 如何将字典中的对象提取到单独的字典中

css - Angular 表达式没有得到评估

AngularJS:服务、提供商、工厂

c# - 捕获由 async void 方法抛出的异常

javascript - 停止 iOS7 放大 webview

javascript - 如何在 Backbone 应用程序中使用 qunit

javascript - AngularJS 在 $http 调用后添加到 JSON 对象

javascript - 在 Controller 中进行单元测试 $http 解析

c++ - 异步 Wt::Http::Client 响应和请求匹配

javascript - Javascript 中的异步方法队列