目前我在AS3
项目中使用promises,但这也与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);
但是我想避免使用每次调用父方法时创建的匿名函数(也许我太肛门)。
另一种选择可能是创建对dfd
对象的类引用,但是当我想同时调用该方法时,这会产生问题。
答案 0 :(得分:0)
所以这是一个潜在的答案,不确定它是否是正确的方法,但它现在适合问题和项目:我扩展了URLLoader
并添加了一个相对于保存dfd
对象的加载器,如下所示:
package com.domain
{
import com.codecatalyst.promise.Deferred;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class URLDeferredLoader extends URLLoader
{
private var _dfd:Deferred;
public function URLDeferredLoader(dfd:Deferred, request:URLRequest=null)
{
super(request);
this._dfd = dfd;
}
public function get dfd():Deferred
{
return _dfd;
}
}
}
它做得很好!