使函数内部的作用域成为全局

时间:2019-03-15 00:09:43

标签: javascript angularjs mean-stack

我想尝试访问$ rootScope.newBloodneed,但是我无法在函数外部访问它,我尝试了rootscope,因此可以将其称为全局,但仍然给我未定义的信息

input

1 个答案:

答案 0 :(得分:0)

假设$ rootScope正常工作,这是异步性而非范围的问题-当您尝试运行时:

console.log($rootScope.newBloodneeded); //gives me undefined

...getBloodRequest不一定要完成。您在$rootScope.newBloodneeded中设置了then,只有在getBloodRequest解决之后,控制台才能运行{p> 1。

Bloodrequest.getBloodrequest($routeParams.id).then(function(data) {
            ...
            $rootScope.newBloodneeded = $scope.newBloodneeded;
            ...

您可以尝试的一项有趣的测试是将控制台日志长时间保存在setTimeout中(当您保证/确保getBloodRequest完成时)。那应该向您证明计时是问题,而不是功能范围界定之一。

基本上:

setTimeout(() => console.log($rootScope.newBloodneeded), 10000000000) // or whatever timing guarantees completion

这里的解决方案是也将需要$rootScope.newBloodneeded的任何逻辑链接到.then中。如果那不起作用,您可能要创建一个从其他地方访问的Promise。 (这超出了此问题的范围,我们需要更多细节来确定最佳实现)。