javascript - 在函数完成之前返回数组和 Angular JS

标签 javascript arrays angularjs

我试图返回数组“self.results”,其中所有数组都已插入,这是在 self.yelpResults 完成之后。我想在另一个函数中使用返回的数组。目前, self.parsedYelpArray 应该接受该数组。

我无法让 self.results 返回所有被插入的数组。相反,它会将原始空数组异步插入 self.parsedYelpArray 函数。

如何解决这个问题?

这是我的 Controller 中的代码:

self.MapRouteArray = CompileMapArray.compileRoutes(data);
self.yelpResults = CompileYelpResults.compileYelp(self.MapRouteArray);
self.parsedYelpArray = ParsingYelpResults.parsingData(self.yelpResults);

并且,这些是相关服务:

 .service('CompileMapArray', function () {
        var self = this;
        self.MapRouteArray = [];
        self.compileRoutes = function (data) {
            for (var i = 0; i < data.response.route[0].leg[0].maneuver.length; i += 2) {
                self.MapRouteArray.push(data.response.route[0].leg[0].maneuver[i].position.latitude + ',' + data.response.route[0].leg[0].maneuver[i].position.longitude);
            }
            return self.MapRouteArray;
        };
    })

    .service('CompileYelpResults', function (YelpResource) {
        var self = this;
        self.results = [];

        self.compileYelp = function (mapArray) {
            for (var j = 0; j < mapArray.length; j++) {
                YelpResource.getListings({term: self.yelpSearch, ll: mapArray[0]}, function (response) {
                    self.results.push(response.businesses);
                            console.log(self.results);
                });
            }
            return self.results;
        };
    })

.service('ParsingYelpResults', function () {
        var self = this;
        self.parsingData = function (results) {
            console.log(results);
        };
    });

最佳答案

您正在尝试从异步函数返回;你总是会得到不可靠的结果,你需要传入一个回调函数来处理你在异步结束时想要的任何操作...比如:

.service('CompileYelpResults', function (YelpResource) {
    var self = this;
    self.results = [];

    self.compileYelp = function (mapArray, callbackFn) {
        for (var j = 0; j < mapArray.length; j++) {
            YelpResource.getListings({term: self.yelpSearch, ll: mapArray[0]}, function (response) {
                self.results.push(response.businesses);
                        console.log(self.results);
            });
        }
        callbackFn(self.results);
    };
});

然后使用回调函数调用该函数,如下所示:

var parsed = CompileYelpResults.compileYelp(self.MapRouteArray, function(result) {
    console.log(result);
});

这适用于所有异步函数。

与您的评论相关的回调函数作为第二个参数传递给 compileYelp取代parsingData ,所以无论您想对 results 进行什么处理,将在回调函数的主体中。它具有额外的优势,因为您可以按照您喜欢的方式使用结果。例如。

var logged = CompileYelpResults.compileYelp(self.MapRouteArray, function(result) {
    console.log(result);
});

var stringified = CompileYelpResults.compileYelp(self.MapRouteArray, function(result) {
    JSON.stringify(result);
});

关于javascript - 在函数完成之前返回数组和 Angular JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33886137/

相关文章:

javascript - 获取 jQuery 中的下一个元素

javascript - preventDefault() 和 stopImmediatePropagation 不工作

javascript - 给setState中的属性加上括号[]

php mysql数组数据插入如果不存在则更新

javascript - 如何将数组项的一部分与第二个数组中的数组项的一部分进行比较?

C - (ptr = = &ptr) 什么是*ptr?

angularjs - 了解高级框架。 Angular.js 中 Controller 、指令、CSS、服务按什么顺序执行?

javascript - 如何使用 Angularjs 编辑输入字段?

javascript - 如果使用 javascript 在 ASP.NET 中页面验证失败,如何禁用提交按钮

javascript - AngularJS 未捕获引用错误 : response is not defined