JavaScript行为和代码检查

时间:2014-10-17 12:23:39

标签: javascript angularjs

我创建了这个plunker

要点是这段代码:

var myObj = function (){
  return {
    getThis: function (callback) {
      return callback("this");
    }
  }
}

var myDidSome = function () {
  return {
    DoSome: function (text) {
      return text + " is cool";
    }
  };
};

var subObj = function (objG, didSome) {
  var txt = objG.getThis(function (text) {
    return didSome.DoSome(text);
  });

  console.log(txt);
}

new subObj(new myObj, new myDidSome);

因此,要解构此代码,请将myObjmyDidSome视为服务(有角度的)。我对myObj.getThis最感兴趣,这应该模仿一些$http响应。所以当它完成调用我的callback函数传递从$http获得的参数。

我一直在考虑的问题是$httpasync。当数据返回时,txt将其视为控制器)类中的subOj属性是否会正确填充,我认为它将是undefined到那时呢?

在我的场景中,这是完全同步的,这显然有效。

所以,我想知道async是否会成为问题?是否采用这种传播对象的return的做法是好的,或者无关紧要,或者是坏的,我不应该这样做?

1 个答案:

答案 0 :(得分:1)

您不能像使用异步方法那样使用return。你必须在回调中做所有事情。在您的示例中,didSome.DoSome(text)的结果永远不会分配给txt,即使在回调运行后也是如此。

对于这样一个简单的情况,您需要记录响应,在回调中执行此操作是一种可接受的方法。但是,如果你需要做一些更复杂的事情,你应该研究promises via $q。这些提供了一种更好的方法,可以将一长串回调重写为更线性的流程。