Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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,我有一个函数,可以根据用户选择的复选框检索大量数据。如果用户选择“全部”,函数将使用链接承诺根据每个复选框的“id”获取所选数据。当用户第一次选择“全部”时,它就可以完美地工作。但是,如果用户取消选择“全部”,然后再次选择“全部”,则被链接的承诺不再是链。第一个承诺,然后暂停。如果刷新页面,链接承诺将再次生效。下面的代码只是介绍“总体思路”的一个片段,因为涉及到很多代码。不知何故,似乎最初的承诺没有得到澄清或其他什么,但我无法找出问题所在,因为我没有收到任何错误 当用户单击“全选”按钮时,将调用

我有一个函数,可以根据用户选择的复选框检索大量数据。如果用户选择“全部”,函数将使用链接承诺根据每个复选框的“id”获取所选数据。当用户第一次选择“全部”时,它就可以完美地工作。但是,如果用户取消选择“全部”,然后再次选择“全部”,则被链接的承诺不再是链。第一个承诺,然后暂停。如果刷新页面,链接承诺将再次生效。下面的代码只是介绍“总体思路”的一个片段,因为涉及到很多代码。不知何故,似乎最初的承诺没有得到澄清或其他什么,但我无法找出问题所在,因为我没有收到任何错误

当用户单击“全选”按钮时,将调用此函数

然后,当用户单击“选择打印”时,调用以下函数:

  $scope.printSections = function () {
  var promise = null;
  $scope.print.sections.sort(setOrder);
  $scope.dataLoading = true;

          var cntr = 0;
          var sections = $scope.print.sections;
          function next() {
              if (cntr < sections.length) {
                  promise = getSectionData(sections[cntr++]);
                  promise.then(next);
              }
          }
          next();



  };
问题是第二次出现,链接承诺的“next()”函数不起作用。
非常感谢您的帮助

以下内容几乎是您代码的复制品,但是没有
$q
Promise
包装。我认为唯一可能缺少的是
switch
中的
default
选项,在大小写不匹配时发送一个空白承诺

var cntr=0;
var部分=[1,2,9878,3]//9878的数据不存在
函数next(){
如果(cntr<截面长度){
promise=getSectionData(sections[cntr++]);
承诺。然后(下一步);
}
}
next();
函数getSectionData(id){
var=null;
开关(id){
案例1:
延迟=Promise.resolve(getOtherData(id).success(函数(数据){
$('pre').append(JSON.stringify(数据[0],{},');
}));
打破
案例2:
延迟=Promise.resolve(getOtherData(id).success(函数(数据){
$('pre').append(JSON.stringify(数据[0],{},');
}));
打破
案例3:
延迟=Promise.resolve(getOtherData(id).success(函数(数据){
$('pre').append(JSON.stringify(数据[0],{},');
}))
打破
default://返回一个默认的承诺对象。注释掉默认值,看看会发生什么
延迟=承诺。解决(真);
打破
}
延期归还;
}
函数getOtherData(id){
返回$.ajax({
网址:'https://jsonplaceholder.typicode.com/users?id=“+id,
方法:“获取”
});
}

  $scope.printSections = function () {
  var promise = null;
  $scope.print.sections.sort(setOrder);
  $scope.dataLoading = true;

          var cntr = 0;
          var sections = $scope.print.sections;
          function next() {
              if (cntr < sections.length) {
                  promise = getSectionData(sections[cntr++]);
                  promise.then(next);
              }
          }
          next();



  };
function getSectionData(section) {
    var deferred;
    deferred = $q.defer();
    var id = section.QuestionSectionID;
    switch (id) {
      case 1:

          deferred.resolve(myService.getfirstSection(id)
            .success(function (data) {
              $scope.firstSection = data;
            }));

        break;
     case 2:
          deferred.resolve(myService.getSecondSection(id)
            .success(function (data) {
              $scope.secondSection= data;
            }));

        break;
    }
return deferred.promise;
}