微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

等待从javascript函数返回,直到条件满足

这是一个奇怪的问题.我有一个客户端对象,我正在使用Crockford-esque公共/私人成员建立:
var client = function() {
  var that,remote_data,other_data; 

  // add public interface
  that.doStuff = function(){...}

  // wait for remote resources to load
  remote_data = jsonRequest1();
  other_data  = jsonRequest2();

  return that;
};

我遇到的问题是我需要加载一些远程JSON资源,然后再返回新的“该”对象(这就是一个可以准备的客户端).数据异步返回(显然),我设置布尔变量来指示每个远程资源何时返回.

我想过要做如下的事情:

return whenInitialized(function() { return that; });

whenInitialized函数返回是否两个布尔标志都为真.我会使用setInterval的组合,但我相信这将无法正常工作.

感谢您的建议.

解决方法

为了在异步操作成功后运行代码,需要一个延续.当操作完成时,它可以只是一个代码调用的回调.

这样的东西

var client = function(done) { // done is the callback
  var that,other_data; 

  // add public interface
  that.doStuff = function(){...}

  // wait for remote resources to load
  var done1 = false,done2 = false;
  var complete1 = function() { done1 = true; if (done2) done(); };
  var complete2 = function() { done2 = true; if (done1) done(); };
  remote_data = jsonRequest1(complete1);
  other_data  = jsonRequest2(complete2);

  return that;
};

但是这些控制标志真的很烦人,并没有真正的规模.一个更好的说明性的方式是使用像jQuery deferreds这样的东西:

$.when(jsonRequest1(),jsonRequest2()).then(done);

原文地址:https://www.jb51.cc/js/151002.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐