Javascript AngularJS console.log返回真实数据,然后返回空对象
我有一个工厂:Javascript AngularJS console.log返回真实数据,然后返回空对象,javascript,angularjs,scope,angularjs-scope,Javascript,Angularjs,Scope,Angularjs Scope,我有一个工厂: app.factory("ExampleFactory", function() { return { map: {} } }); 和控制器: app.controller("appCtrl", function($scope, $http, ExampleFactory) { $scope.map = ExampleFactory.map; $scope.init = function() { $http.ge
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();
});
为什么在第一种情况下,它返回一个数组,然后什么也不返回
更新:对不起,还有一个问题,我已经解决了。我不会删除答案,因为我收到了正确的解决方案。返回数组的第一个案例实际上是在第二个案例中执行的。程序流程如下: $scope.map由工厂设置为空对象。 调用$scope.init $http.get向/api发送http请求,但请求尚未返回 $scope.map被打印到console.log,仍然是一个空对象 在此之后的某个时刻,web服务器返回您的http请求,此时调用.success函数。 exampleMethod将$scope.map设置为数组 $scope.map打印到console.log,此时它是一个数组
我认为它应该首先在控制台中重新调整为空,然后在数组中重新调整 这是因为当接收到来自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();
});
这对你有意义吗
快乐编码 那是真的!我在浏览器中看到的第一个日志是一个空对象。但是我如何实现我想要的呢?如果你在问题中提供更多关于你想要什么的信息,我可以看看如何实现。