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();
});
这对你有意义吗


快乐编码

那是真的!我在浏览器中看到的第一个日志是一个空对象。但是我如何实现我想要的呢?如果你在问题中提供更多关于你想要什么的信息,我可以看看如何实现。