Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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 具有闭包范围变量的每个对象的角度_Javascript_Angularjs - Fatal编程技术网

Javascript 具有闭包范围变量的每个对象的角度

Javascript 具有闭包范围变量的每个对象的角度,javascript,angularjs,Javascript,Angularjs,我有以下代码 $scope.getBooksByUser = function (user) { var books = []; ProductFactory.getBooks.query({ id: user.id }).$promise.then(function (result) { angular.forEach(result, function(i) { books.push(i.name); debugg

我有以下代码

$scope.getBooksByUser = function (user) {
    var books = [];
    ProductFactory.getBooks.query({ id: user.id }).$promise.then(function (result) {
        angular.forEach(result, function(i) {
            books.push(i.name);
            debugger;
        })
    });
};
如您所见,我正在尝试为每个填充一个简单的javascript数组。执行此函数时,数组
books
仍为空


我对这种行为有点困惑,因为当我试着调试我的代码时,我可以看到每次迭代的值都是在数组中设置的。实际上chrome调试器告诉我数组
books
闭包范围内,我想这是一个原因,但我仍然找不到解释以及如何修复它

事实上,如果我使用的是
$scope.books=[]
,它可以正常工作,但我不需要
$scope
,只需要一个javascript数组


提前谢谢

我想这是因为
异步
调用
AJAX
。在您的情况下,编译器不会等待ajax响应。你应该这样做

 ProductFactory.getBooks.query({ id: user.id }).$promise.success(function (result) {
        angular.forEach(result, function(i) {
            books.push(i.name);
            debugger;
        })
    });

希望有帮助:-)

我想这是因为
异步调用
AJAX
造成的。在您的情况下,编译器不会等待ajax响应。你应该这样做

 ProductFactory.getBooks.query({ id: user.id }).$promise.success(function (result) {
        angular.forEach(result, function(i) {
            books.push(i.name);
            debugger;
        })
    });

希望有帮助:-)

您可能想发布“ProductFactory”的代码,因为您的工厂可能有错误,但您提供的代码片段可能不足以诊断您的问题。您正在将
i.name
推到
用户
数组中,而不是推到
书籍
数组中。这就是为什么它是空的。Jesse,不,它工作得很好,我知道,正如我说的,如果我使用$scope变量,它将是fineAWolf,抱歉=)它是一个拼写错误,我刚刚编辑了它“我可以看到,在每个迭代中,值都是在数组中设置的”-但你也说它是空的。所以它既是空的又不是空的?您可能想发布“ProductFactory”的代码,因为您的工厂可能有错误,但您提供的一小段代码可能不足以诊断您的问题。您正在将
i.name
推入
users
数组,而不是
books
数组。这就是为什么它是空的。Jesse,不,它工作得很好,我知道,正如我说的,如果我使用$scope变量,它将是fineAWolf,抱歉=)它是一个拼写错误,我刚刚编辑了它“我可以看到,在每个迭代中,值都是在数组中设置的”-但你也说它是空的。所以它是空的,不是空的?维尼特,谢谢你,但它根本不起作用。我在控制台中遇到一个错误-“TypeError:undefined不是一个函数”指向success FunctionVinet,谢谢,但它根本不起作用。我在控制台中得到一个错误-“TypeError:undefined不是一个函数”,指向成功函数