簡體   English   中英

從函數返回的數組不會被另一個函數捕獲

[英]Returned array from a function is not caught in another function

正如標題所說,即使它可能有點模糊,當我調用一個函數在另一個函數中返回一個對象數組時,由於某種原因,我無法在當前函數中捕獲另一個對象的結果。 我有一種感覺,這只是我想念的一件小事。

這是返回對象數組的函數:

function GetAllNeighboors(myLocationLat, myLocationLong) {
    $.get("/Home/GetAllLocation",
        function (data, status) {
            Neightbours = new Object();
            var j = 0;
            for (var i = 0; i < data.length; i++) {
                if (distanceBetweenTwoStations(myLocationLat, myLocationLong, data[i].latitudine, data[i].longitudine,"K") <= 1 && data[i].latitudine != myLocationLat && data[i].longitudine != myLocationLong) {
                    Neightbours[j] = data[i];
                    j++;
                }
            }
            return Neightbours;        
        }); 

}

這是我調用該功能的地方:

if (data.isClosed != true) {
                    map.setCenter(new google.maps.LatLng(data.latitudine, data.longitudine));
                    map.setZoom(17);
                } else {
                    Vecini = new Object();
                    Vecini = GetAllNeighboors(data.latitudine, data.longitudine);

注意:第一個功能的Neightbours帶有預期結果。

注2:我想我弄清楚問題是什么,但我不確定如何解決它。 問題是我不是在等待結果,我應該使函數異步,以便在第二個函數中得到結果。 知道我怎么能這樣做嗎?

你沒有從第一個函數返回任何東西,你從該函數內部的函數返回。 嘗試這個:

function GetAllNeighboors(myLocationLat, myLocationLong) {
   return $.get("/Home/GetAllLocation",
        function (data, status) {
            Neightbours = new Object();
            var j = 0;
            for (var i = 0; i < data.length; i++) {
                if (distanceBetweenTwoStations(myLocationLat, myLocationLong, data[i].latitudine, data[i].longitudine,"K") <= 1 && data[i].latitudine != myLocationLat && data[i].longitudine != myLocationLong) {
                    Neightbours[j] = data[i];
                    j++;
                }
            }
            return Neightbours;        
        }); 

}

您可以將callbackGetAllNeighbours函數,並將其值設置在$ .get回調中,如下所示

function GetAllNeighboors(myLocationLat, myLocationLong, cb) {
    $.get("/Home/GetAllLocation",
        function (data, status) {
            Neightbours = new Object();
            var j = 0;
            for (var i = 0; i < data.length; i++) {
                if (distanceBetweenTwoStations(myLocationLat, myLocationLong, data[i].latitudine, data[i].longitudine,"K") <= 1 && data[i].latitudine != myLocationLat && data[i].longitudine != myLocationLong) {
                    Neightbours[j] = data[i];
                    j++;
                }
            }
            cb(Neightbours);        
        });
}

你現在稱之為:

if (data.isClosed != true) {
   map.setCenter(new google.maps.LatLng(data.latitudine, data.longitudine));
   map.setZoom(17);
} else {                    
   GetAllNeighboors(data.latitudine, data.longitudine, function(Neighboors){
       Vecini = new Object();
       Vecini = Neighboors
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM