-1

この関数が呼び出されたとき、関数がオブジェクトを返す前にコールバックが終了するのを待ってほしいr

    function getWmsLayers(oneServerState){
            reader = new GeoExt.data.WMSCapabilitiesReader();;
            var serverLayers = new Array();
            var store = new GeoExt.data.WMSCapabilitiesStore({
                    url: OpenLayers.ProxyHost + oneServerState.serverUrl,
                    reader: reader
            });
            var isCallBackCompleted = false;
            store.load({
                    callback: function (r) {
                            return r;
                    }
            });
            //Do something ??
            return r;
    };


    layers = getWMSLayers(oneServerState);
4

2 に答える 2

2

非同期呼び出しが完了するのを待つことはできません。それは本質的に非同期呼び出しの定義です!. 最善の方法は、呼び出しロジックを分割することです。したがって、これの代わりに:

stuff();
result = doAsyncCall(); // WILL NOT WORK!
moreStuff(result);

次のようなコールバックを使用します。

stuff();
var callback = function (result) { moreStuff(result); };
doAsyncCall(callback);
于 2013-02-22T20:13:54.913 に答える
1

レイヤーをロードするにはw8が必要です。このような:

    function getWmsLayers(oneServerState, fnCallback){
            reader = new GeoExt.data.WMSCapabilitiesReader();;
            var serverLayers = new Array();
            var store = new GeoExt.data.WMSCapabilitiesStore({
                    url: OpenLayers.ProxyHost + oneServerState.serverUrl,
                    reader: reader
            });
            var isCallBackCompleted = false;
            store.load({
                    callback: function (r) {
                        fnCallback(r);
                    }
            });
    };

次に、この関数を次のように呼び出します。

    getWmsLayers(serverstate, function ( l ) {
       layers = l;
       nextFunctiontoContinueProgressing();
    });

これは、コールバック チェーンを構築してリクエストを完了する方法です。

于 2013-02-22T20:16:37.663 に答える