获取 asyncValidator 返回的承诺结果
Getting the result of the promise returned by an asyncValidator
angular 文档中的 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;
});
};
如您所见,当返回被拒绝的承诺时,它传递了值 "exists"。这似乎意味着我可以在使用模型时访问此值。这可能吗?
$http.get('/api/users/' + value)
看起来像一个常规的 ajax 请求。将第一个参数添加到成功回调可能会让您访问 returned 数据 - 如果您的 api 确实 return 任何。
then(function resolved(response) {
console.log(response);
return $q.reject('exists');
}
我也很纳闷,这里没找到答案,我看了一下源码(for 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 返回的承诺与使用返回值的函数链接在一起。
因此,很遗憾,无法访问返回值。
angular 文档中的 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;
});
};
如您所见,当返回被拒绝的承诺时,它传递了值 "exists"。这似乎意味着我可以在使用模型时访问此值。这可能吗?
$http.get('/api/users/' + value)
看起来像一个常规的 ajax 请求。将第一个参数添加到成功回调可能会让您访问 returned 数据 - 如果您的 api 确实 return 任何。
then(function resolved(response) {
console.log(response);
return $q.reject('exists');
}
我也很纳闷,这里没找到答案,我看了一下源码(for 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 返回的承诺与使用返回值的函数链接在一起。
因此,很遗憾,无法访问返回值。