我试图返回数组“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/