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

前端之家收集整理的这篇文章主要介绍了等待从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);

猜你在找的JavaScript相关文章