gpt4 book ai didi

javascript变量在函数外部使用

转载 作者:行者123 更新时间:2023-12-03 10:28:57 25 4
gpt4 key购买 nike

$scope.pagination_data = function(page_data){
count = page_data.data.count;
};

console.log("outside count is",count);// this not working

var page = function(){
userService.paginate()
.then(function(user){
$scope.pagination_data(user);
console.log("count is",count);//this is works
});
};

在该代码中,我使用 $http 服务,通过使用我在想要计数之后获取数据,然后我也获取计数,但现在我希望在 Controller 中访问此计数变量,但这对我来说是无法访问的。我应该怎么办..?

最佳答案

实际上,两者都有效,但您在错误的时间调用了第一个。

.then() 表示 paginate() 返回一个 Promise。这应该暗示它是异步的。

为了证明这一点,请使用 setTimeout 延迟调用您的第一个 console.log:

$scope.pagination_data = function(page_data){
count = page_data.data.count;
};

setTimeout(function(){
console.log("outside count is",count);// this should work
}, 5000); // wait 5 seconds before calling the code above
// If 5 seconds is not long enough increase it to 10 or something

var page = function(){
userService.paginate()
.then(function(user){
$scope.pagination_data(user);
console.log("count is",count);//this is works
});
};

什么是异步代码?异步只是意味着稍后会调用该代码。 paginate().then() 所做的并不是立即调用 function(user) 函数,而是记住它应该调用 function(user) (然后调用您的 pagination_data 函数来设置 count 的值)。然后它继续运行其他东西。

当没有其他代码要运行时,事件循环就会得到处理,并且 userService.paginate() 需要异步执行的任何事情都会得到处理。

userService.paginate() 正在等待最终返回时(这可能是网络请求、用户点击等),function(user) 函数最终被调用。这反过来又调用 $scope.pagination_data() ,它将结果分配给全局 count 变量。

setTimeout() 的作用是什么?嗯,它做了我上面描述的同样的事情。它不会立即调用console.log(),而是会记住稍后调用它。然后,当 5 秒(5000 毫秒)到期,并且没有其他 javascript 代码运行时(这很重要,因为这意味着 javascript 可以运行事件循环),console.log() 最终被调用。

关于javascript变量在函数外部使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29298173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com