Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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_Angularjs - Fatal编程技术网

Javascript 把我的AngularJS电话搞得一团糟

Javascript 把我的AngularJS电话搞得一团糟,javascript,angularjs,Javascript,Angularjs,我遇到了一个问题我正在将一些json文件解析为html页面,URL位于另一个json文件中:我遇到了一个大问题,因为没有检测到错误,我得到了一个空页面,所以在使用一些警报进行调试时,我发现我的控制器得到了一个空列表: 我应该按通知的顺序拨打电话: alert(tab[i]+ " 1"); alert(list+ " 2"); alert(list+ " 3"); 但是我得到了这个订单: alert(tab[i]+ " 1"); alert(list+ " 3"); alert(li

我遇到了一个问题我正在将一些json文件解析为html页面,URL位于另一个json文件中:我遇到了一个大问题,因为没有检测到错误,我得到了一个空页面,所以在使用一些警报进行调试时,我发现我的控制器得到了一个空列表: 我应该按通知的顺序拨打电话:

 alert(tab[i]+ " 1");
 alert(list+ " 2");
 alert(list+ " 3");
但是我得到了这个订单:

 alert(tab[i]+ " 1");
 alert(list+ " 3");
 alert(list+ " 2");
这是我的密码
app.factory('myapp',['$http',函数($http){
函数getLists(){
$http.get('url').success(函数(数据){
返回数据;
var选项卡=[];
对于(i=0;i<(数据)。长度;i++){
tab.推送(数据[i]);
}
var列表=[];

对于(i=0;i由于您的格式设置,我不确定所有问题,但您的匿名成功处理程序的第一行似乎返回了数据,然后您继续执行for循环,因为您从该函数返回了一个值。

由于您的格式设置,我不确定所有问题,但它确实存在ems表示匿名成功处理程序的第一行返回数据,然后进入for循环,该循环可能永远不会执行,因为您从该函数返回了一个值。

由于您试图在for循环中发出异步请求,由于异步请求的性质,返回顺序完全不一致.您必须确保退货订单符合以下要求,即允许您按顺序解决承诺

app.factory('listsFactory', ['$http', '$q', function($http, $q) {
  function getLists() {
    return $http.get('url').success(function(tabs) {
      return $q.all(tabs.map(function(tab) {
        return $http.get(tab)
          .then(function(res) {
            return res.data;
          });
      }));
    })
  }

  return {
    getLists: getLists
  };
}]);
然后,像这样使用
getlist

app.controller('myController', ['listsFactory', function(listsFactory) {
  listsFactory.getLists().then(function(lists) {
    // do something with lists
    // $scope.something = lists;
  });
}]);
稍微细分一下:设置选项卡的第一个循环似乎是多余的,因为回调参数包含您想要的数据(除非我遗漏了什么)。因此,只需命名arg
选项卡
,然后将一个新的承诺数组传递给
$q.all
并返回该值。当调用
getlist
时,它将返回一个承诺,其中包含每个承诺值的数组,按顺序排列

app.factory('listsFactory', ['$http', '$q', function($http, $q) {
  function getLists() {
    return $http.get('url').success(function(tabs) {
      return $q.all(tabs.map(function(tab) {
        return $http.get(tab)
          .then(function(res) {
            return res.data;
          });
      }));
    })
  }

  return {
    getLists: getLists
  };
}]);
要详细说明
成功
回调参数:

$http.get('url').success(function(data) {
  var tab = [];
  for (i = 0; i < (data).length; i++) {
   tab.push(data[i]);
  }
...
$http.get('url').success(函数(数据){
var选项卡=[];
对于(i=0;i<(数据)。长度;i++){
tab.推送(数据[i]);
}
...

您在这里所做的工作是不必要的,因为您正在有效地克隆
数据
,这样它就是一个新数组,具有相同的值,但命名为
选项卡
。您可以通过命名
成功
回调参数
选项卡
,来避免这种情况。这将包含与您的版本完全相同的数据,并且减少冗余。

由于您试图在for循环中发出异步请求,由于异步请求的性质,返回顺序完全不一致。您必须使用类似的内容确保返回顺序,这允许您按顺序解析承诺

app.factory('listsFactory', ['$http', '$q', function($http, $q) {
  function getLists() {
    return $http.get('url').success(function(tabs) {
      return $q.all(tabs.map(function(tab) {
        return $http.get(tab)
          .then(function(res) {
            return res.data;
          });
      }));
    })
  }

  return {
    getLists: getLists
  };
}]);
alert(tab[i]+ " 1");
alert(list+ " 3");
alert(list+ " 2");
然后,像这样使用
getlist

app.controller('myController', ['listsFactory', function(listsFactory) {
  listsFactory.getLists().then(function(lists) {
    // do something with lists
    // $scope.something = lists;
  });
}]);
稍微细分一下:设置选项卡的第一个循环似乎是多余的,因为回调参数包含您想要的数据(除非我遗漏了什么)。因此,只需命名arg
选项卡
,然后将一个新的承诺数组传递给
$q.all
并返回该值。当调用
getlist
时,它将返回一个承诺,其中包含每个承诺值的数组,按顺序排列

app.factory('listsFactory', ['$http', '$q', function($http, $q) {
  function getLists() {
    return $http.get('url').success(function(tabs) {
      return $q.all(tabs.map(function(tab) {
        return $http.get(tab)
          .then(function(res) {
            return res.data;
          });
      }));
    })
  }

  return {
    getLists: getLists
  };
}]);
要详细说明
成功
回调参数:

$http.get('url').success(function(data) {
  var tab = [];
  for (i = 0; i < (data).length; i++) {
   tab.push(data[i]);
  }
...
$http.get('url').success(函数(数据){
var选项卡=[];
对于(i=0;i<(数据)。长度;i++){
tab.推送(数据[i]);
}
...
您在这里所做的工作是不必要的,因为您正在有效地克隆
数据
,这样它就是一个新数组,具有相同的值,但命名为
选项卡
。您可以通过命名
成功
回调参数
选项卡
,来避免这种情况。这将包含与您的版本完全相同的数据,并且减少冗余

alert(tab[i]+ " 1");
alert(list+ " 3");
alert(list+ " 2");
您将按以下顺序获得订单,因为
$http
回调函数中的
警报(列表+“2”)
是异步的。因此不保证何时调用回调函数

但是,
警报(列表+“3”)
将在for循环完成后立即执行。即,对for循环进行异步调用,但不会回调函数

这就是您在收到警报(列表+“2”)
之前收到警报(列表+“3”)的原因

app.factory('myapp',['$http','$q',函数($http,$q){
函数getLists(){
$http.get('url').success(函数(数据){
返回数据;
var选项卡=[];
对于(i=0;i<(数据)。长度;i++){
tab.推送(数据[i]);
}
var列表=[];
var承诺=[];
对于(i=0;i
您将按以下顺序获得订单,因为
$http
回调函数中的
警报(列表+“2”)
是异步的。因此不保证何时调用回调函数

但是,
警报(列表+“3”)
将在for循环完成后立即执行。即,对for循环进行异步调用,但不会回调函数

这就是您在收到警报(列表+“2”)
之前收到警报(列表+“3”)的原因

app.factory('myapp',['$http','$q',函数($http,$q){
函数getLists(){
$http.get('url').success(函数(数据){
返回数据;
var选项卡=[];
对于(i=0;i<(数据)。长度;i++){
tab.推送(数据[i]);
}
var列表=[];
var承诺=[];
对于(i=0;i