2
当前我在AS3
项目中使用承诺,但这也与JS
项目相关。在处理事件监听器时处理承诺
说我有这样的代码,在AS3
:
public function getFeed():Promise
{
var request:URLRequest = new URLRequest(END_POINT);
var loader:URLLoader = new URLLoader();
var dfd:Deferred = new Deferred();
loader.addEventListener(Event.COMPLETE, handleGetFeedReady, false, 0, true);
loader.load(request);
return dfd.promise;
}
private function handleGetFeedReady(e:Event):void
{
e.target.removeEventListener(Event.COMPLETE, handleGetFeedReady);
vo.entries = JSON.decode(e.target.data);
// resolve the dfd here
}
我想什么了dfd
(延迟)对象以某种方式传递给我的事件处理程序。现在我知道,我可以使用像这样的匿名函数:
loader.addEventListener(Event.COMPLETE, function(e:Event):void
{
handleGetFeedReady(dfd, e);
}, false, 0, true);
但我想避开使用的每个I调用父类的方法时创建匿名函数的(也许我是太肛门)。
另一种选择是创建对dfd
对象的类引用,但是当我想要同时调用该方法时会产生问题。
你为什么要这样做?不应该在服务类之外传递延迟。这正是Promises试图解决的问题之一。 – Creynders
为什么他们不应该在课外传授? –
封装。如果你传递延迟,其他一些actor可以解决或拒绝异步操作,即使它们与它无关。只有组成代理人才能访问推迟并返回Promise。另外,客户端不应该关心服务正在采取多少异步步骤。如果最终的承诺被退回,他们将不知道。有了Deferreds,它们不是(两个异步进程可以并行运行,所以在这种情况下,它只能返回其中一个Deferreds,你需要返回这两个),然后你又回到原点了。 – Creynders