Angular JS:无法读取未定义的属性'then'

时间:2016-11-03 19:48:59

标签: javascript angularjs promise

我不确定我在这里做错了什么 -

function clearBefore(val) {
                if (val.isEnrolled && val.name === 'XYZ') {
                    vm.clear(val, 'Hello').then(function(value){
                        return value;
                    });
                    return true;
                }
            }

然后调用它 -

clearBefore(val).then(function (returnVal) {});

我是承诺的新手,请让我知道如何更新函数以返回承诺。

4 个答案:

答案 0 :(得分:1)

在“if”中你返回“true”并且在“if”之外你什么也没有返回,所以你不能使用clearBefore()的返回作为一个承诺。

也许这就是你想要的:

function clearBefore(val) {
  if (val.isEnrolled && val.name === 'XYZ') {   
    return $q.resolve(vm.clear(val, 'Hello'));
  }

  return $q.reject();
}

clearBefore(val).then(
  function(val) {
    console.log('ok', val);
  },
  function() {
    console.log('not ok...');
  }
);

现在函数的每个返回点都返回一个promise。我们在“if”中有一个$q.resolve(),在{outside}外面有$q.reject()来返回失败的承诺。

答案 1 :(得分:0)

你需要回复你的承诺

function clearBefore(val){
     if (val.isEnrolled && val.name === 'XYZ')
     {   
         return vm.clear(val, 'Hello').then(function(value)
         { 
              return value; 
         }); 
         return true; 
      } 
}

类似这样的事情

答案 2 :(得分:0)

您似乎在clearBefore()函数结束时没有返回任何内容,因此请尝试这样做:

function clearBefore(val) {
                if (val.isEnrolled && val.name === 'XYZ') {
                    vm.clear(val, 'Hello').then(function(value){
                        return value;
                    });
                }
              return val; // here you should return what you need
            }

之后:

clearBefore(val).then(function (returnVal) {});

答案 3 :(得分:0)

为了解决这个问题,我做了类似的事情(介绍了函数的承诺)

function clearOTPBefore(page) {
                return $q(function (resolve, reject) {
                    if (val.isEnrolled && val.name === 'XYZ') {
                        return vm.clear(val, 'Hello').then(function(value){
                            return resolve(value);
                        });
                    } else {
                        resolve(true);
                    }

                })
            }