Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS服务到变量_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript AngularJS服务到变量

Javascript AngularJS服务到变量,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,有没有办法将数据存储到变量中 我试过: $scope.another = function(){ var new_data; userService.getInfo().success(function(data){ new_data = data; }); return new_data; }; var data = $scope.an

有没有办法将数据存储到变量中

我试过:

$scope.another =
        function(){
            var new_data;
            userService.getInfo().success(function(data){
               new_data = data;
            });
            return new_data;
        };

var data = $scope.another();
但它在控制台日志中返回“undefined”。多谢各位

编辑

我现在得到一个空数组用于新的_数据

var new_data = [];

$scope.another = 
                function(callback){
                    userService.getInfo().success(function(data){
                        paymentService.getCashierParams({ "cardNumber": data.cardNumber}).success(function(data){
                            gameService.getAllgames({ "PID":data.GetCashierParameters.PID, "limit": 6, "skinID": 1}).success(function(data) {
                                callback(data.data.GetFlashGamesResult.Data.FlashGame);
                            });
                        });
                    });
                };
          $scope.another(function(result){
                    new_data = result;
                });
                console.log(new_data);

你需要以不同的方式思考这个问题。您的
getInfo
方法返回一个承诺。承诺的成功回调永远不会立即调用。它可能在将来的某个时候被调用,但在此期间,您的代码将继续执行,
$scope的返回值。另一个
将是
未定义的

相反,将您希望执行的任何逻辑放在成功回调中

userService.getInfo().success(function (data) {
    // Do stuff with data.
});
如果您不习惯使用异步数据,这可能看起来很奇怪。但它比另一种方法要好得多,即在网络请求、数据库读取等完成时,页面可能会挂起几秒钟

如果您担心缩进,可以创建单独的函数来处理数据

function processData(data) {
    // Process stuff...
    return data;
}

function handleData(data) {
    data = processData(data);
    console.log(data);
}

userService.getInfo().success(handleData);

这是由于您调用的异步函数造成的。尝试改用回调。大概是这样的:

$scope.another =
    function(fn){
        userService.getInfo().success(function(data){
           fn(data);
        });

    };


  var data = $scope.another(function(doSomething) {
    alert(doSomething);
    return doSomething;
};

问题是
getInfo
是异步的,这是的重复。这是另一个异步js问题。尝试抛出一些console.log语句,看看发生了什么事。我不知道如何将我要存储的数据记录到变量中。但我仍然收到一个未定义的结果。@sanosuke:你把console.log放在哪里了?如果您在$scope.one调用之后执行此操作,则有意义。因为async不会等待,而是转到下一行。尝试先声明var数据,然后调用$scope.other。如果数据仍然具有旧值,则表示异步调用尚未完成。现在使用promiseI获取一个空数组。在最近的编辑中,您仍然没有处理回调中的逻辑<代码>$scope.other(函数(结果){console.log(结果);})将起作用。传递给
$scope的回调。另一个
不会在
控制台.log(新的\u数据)之前执行执行。另外,您正在“获取”一个空数组,因为您在第1行将
new_data
设置为一个空数组。你甚至不需要
new\u data
变量,只要去掉它就行了。我该怎么做才能让
console.log(new\u data)
$scope之后执行。另一个
?我注意到
console.log
是在
$scope.另一个
之前执行的。这是不可能的。这不是承诺的工作方式。不要试图用连续的代码行来解决问题。相反,用一系列相互传递数据的函数来解决这个问题。