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);

但是我想避免使用每次调用父方法时创建的匿名函数(也许我太肛门了)。

另一种选择可能是创建对dfd对象的类引用,但是当我想同时调用该方法时会产生问题。

4

1 回答 1

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;
        }
    }
}

它做得很好!

于 2013-05-19T09:57:15.727 回答