我有一家工厂:
app.factory("ExampleFactory", function() {
return {
map: {}
}
});
和控制器:
app.controller("appCtrl", function($scope, $http, ExampleFactory) {
$scope.map = ExampleFactory.map;
$scope.init = function() {
$http.get("/api") //success
.success(function(result) {
$scope.map = exampleMethod(result);
console.log($scope.map); //{ "1": Object, "2": Object }
});
console.log($scope.map); //Object {}
};
$scope.init();
});
为什么在第一种情况下它会返回一个数组,但之后什么都不返回?
更新:抱歉,还有另一个问题,我已经解决了。我不会删除答案,因为我收到了正确的答案。
答案 0 :(得分:0)
返回数组的第一种情况实际上是第二种情况。程序流程如下:
$scope.map
由工厂设置为空对象。$scope.init
被称为$http.get
向“/ api”发送http请求(但请求尚未返回)$scope.map
打印到console.log
,仍为空对象.success
函数。exampleMethod
将$scope.map
设置为数组$scope.map
打印到console.log
,此时它是一个数组答案 1 :(得分:0)
我认为它应该首先在控制台中重新清空,然后是数组。
这是因为当收到GET /api
的响应时,您传递给success方法的回调是异步执行的。让我们在你的代码中解释它:
app.controller("appCtrl", function($scope, $http, ExampleFactory) {
$scope.map = ExampleFactory.map;
$scope.init = function() {
// Get request to the /api
$http.get("/api") //success
// here we instruct it to use our function if success
// but it is not executed until the response is received.
.success(
// Callback that is executed on success HTTP 200
function(result) {
$scope.map = exampleMethod(result);
// Second console.log displayed after receiving
// the response to the $http.get call
console.log($scope.map); //{ "1": Object, "2": Object }
}
/////////////////////////////////////////////////
);
// First console.log will display empty object
console.log($scope.map); //Object {}
};
$scope.init();
});
这对你有意义吗?
快乐的编码!