Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 处理延迟异步回调的典型方法_Javascript_Angularjs_Asynchronous_Q_Winjs_Rsvp_Promise - Fatal编程技术网

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

Javascript 处理延迟异步回调的典型方法,javascript,angularjs,asynchronous,q,winjs,rsvp,promise,Javascript,Angularjs,Asynchronous,Q,Winjs,Rsvp,Promise,我不熟悉使用Javascript开发web应用程序 由于Javascript应用程序看起来是高度异步的,我想知道是否有一种通用的方法来处理调用太晚的回调。 例如,假设发出了异步请求,当响应最终返回时,应用程序处于不同的状态,最终不适合处理响应 如果响应成功或出现错误,您将如何检测并处理这种情况?这个问题可以从高层架构的角度来解决,还是解决方案总是与JS框架和/或应用程序类型相关联 在相关问题中,是否建议web应用程序在服务器端处理时阻止输入 谢谢你在angularJS中,你可以使用$q.defe

我不熟悉使用Javascript开发web应用程序

由于Javascript应用程序看起来是高度异步的,我想知道是否有一种通用的方法来处理调用太晚的回调。 例如,假设发出了异步请求,当响应最终返回时,应用程序处于不同的状态,最终不适合处理响应

如果响应成功或出现错误,您将如何检测并处理这种情况?这个问题可以从高层架构的角度来解决,还是解决方案总是与JS框架和/或应用程序类型相关联

在相关问题中,是否建议web应用程序在服务器端处理时阻止输入


谢谢你

在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;
    });