等待从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);

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...