素材牛VIP会员
let 声明的函数中请求的数据为什么在全局作用域请求不到
 生***炸  分类:JavaScript  人气:1116  回帖:4  发布于6年前 收藏

 let loadMapDataPromise = function() {
      indexHttpService.getDataPromise().then(function(res) {
           $scope.markerArr=res.Data;   
            });
        };
  loadMapDataPromise();
  console.log($scope.markerArr);
  console.log($scope);

为什么在函数外面打印$scope.markerArr是undefined 呢?
但是我在下面试着打印$scope,出来的$scope 上面有markerArr这个数组啊??

讨论这个帖子(4)垃圾回帖将一律封号处理……

Lv5 码农
us***es 职业无 6年前#1

你这个跟let没关系
是因为promise是异步的关系

当你console时,promise的resolve还没执行,所以$scope.markerArr不存在
只打印$scope,实际上在console里输出的是一个引用,当你去查看用鼠标点击时才去取值
这时promise已经执行完成了

如果你要打印出$scope.markerArr,需要在promise的then回调里输出,比如可以这样改

let loadMapDataPromise = function() {
  return indexHttpService.getDataPromise().then(function(res) {
    $scope.markerArr=res.Data;   
  });
};
loadMapDataPromise().then(() => { console.log($scope.markerArr); });
Lv4 码徒
想***儿 技术总监 6年前#2

额。。你的 $scope.data 是从哪里来的

Lv4 码徒
朱***叶 UI设计师 6年前#3

异步异步异步
这根let没关系好吗,异步的问题
你输出$scope有值是因为控制台的原因控制台输出的是引用地址

Lv4 码徒
日***天 职业无 6年前#4

是我看走眼了。。。

如果你数据少的话 你可以改成同步

async:true

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取