获取asyncValidator返回的promise的结果

时间:2015-04-13 17:08:43

标签: angularjs angular-ngmodel

angular docs中的asyncValidator示例如下所示:

ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) {
  var value = modelValue || viewValue;

  // Lookup user by username
  return $http.get('/api/users/' + value).
     then(function resolved() {
       //username exists, this means validation fails
       return $q.reject('exists');
     }, function rejected() {
       //username does not exist, therefore this validation passes
       return true;
     });
};

正如您所看到的,当返回被拒绝的承诺时,它会传递价值"存在"。这似乎暗示我在使用模型时可以访问此值。这可能吗?

2 个答案:

答案 0 :(得分:1)

我也想知道,由于我在这里没有找到答案,所以我看一下源代码(对于AngularJS 1.7.5):

function processAsyncValidators() {
  var validatorPromises = [];
  /* … */
  forEach(that.$asyncValidators, function(validator, name) {
    var promise = validator(modelValue, viewValue);
    /* … */
    validatorPromises.push(promise.then(function() {
      /* … */
    }, function() {
      /* … */
    }));
  });
  /* … */
}

在这里,您可以看到asyncValidator返回的Promise与确实使用返回值的函数链接在一起。

因此,不幸的是,无法访问返回的值。

答案 1 :(得分:-1)

$http.get('/api/users/' + value)看起来像是常规的ajax请求。将第一个参数添加到成功回调可能会让您访问返回的数据 - 如果您的api确实返回任何数据。

then(function resolved(response) {
  console.log(response);
  return $q.reject('exists');
}