我创建了这个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);
因此,要解构此代码,请将myObj
和myDidSome
视为服务(有角度的)。我对myObj.getThis
最感兴趣,这应该模仿一些$http
响应。所以当它完成调用我的callback
函数传递从$http
获得的参数。
我一直在考虑的问题是$http
是async
。当数据返回时,txt
(将其视为控制器)类中的subOj
属性是否会正确填充,我认为它将是undefined
到那时呢?
在我的场景中,这是完全同步的,这显然有效。
所以,我想知道async
是否会成为问题?是否采用这种传播对象的return
的做法是好的,或者无关紧要,或者是坏的,我不应该这样做?
答案 0 :(得分:1)
您不能像使用异步方法那样使用return
。你必须在回调中做所有事情。在您的示例中,didSome.DoSome(text)
的结果永远不会分配给txt
,即使在回调运行后也是如此。
对于这样一个简单的情况,您需要记录响应,在回调中执行此操作是一种可接受的方法。但是,如果你需要做一些更复杂的事情,你应该研究promises via $q
。这些提供了一种更好的方法,可以将一长串回调重写为更线性的流程。