我会告诉你一些我在做什么,所以你可以帮助我。我正在阅读.txt中的一些记录以及每个记录我需要进行一些验证,为了做到这一点,我对我的后端服务进行$ resource调用以获得正则表达式,用于验证每条记录。
我需要等待服务的响应。我有这个(我使用$ recourse来获取.factory):
function findRegex() {
var data;
var deferred = $q.defer();
data = findRegexCountry.get({ number: $scope.number }).$promise.then(function(data) {
deferred.resolve(data.body);
});
return deferred.promise;
}
我可以成功地在我需要的功能中使用它:
//validar tipo 2
var bool = false;
if (tipo == 2) {
if (numbers.test(split[0]) && numbers.test(split[1])) {
$scope.number = '58';
findRegex().then(function(data) {
bool = true;
// console.log('data', data);
$scope.regexResponse = data;
regex_all = data.regex_all;
regex_length = data.regex_length;
regex_justCountry = data.regex_justCountry;
regex_justCarriers = data.regex_justCarriers;
console.log('1. regex_justCarriers ', regex_justCarriers);
console.log('1. regex_length ', regex_length);
});
//nothing here :( SOS
console.log('2. regex_justCarriers ', regex_justCarriers);
这样做有效,但我需要等待响应才能继续使用我的代码,让我告诉你为什么(也许你可以给我一个更好的主意)。
我无法在 findRegex()中创建所有逻辑,首先是因为我不想每次都进行此调用 我从中读取了一条记录。文本。我想从服务中获取正则表达式一次,如果我检查的第一条记录对我来说是有效的记录,其他的将使用我第一次调用服务时已经获得的变量,还有其他原因,但主要是这个,我无法在其中制作我需要的所有代码。
我该怎么办?
答案 0 :(得分:0)
您的函数findRegex
正在返回一个promise对象,而不是已处理的数据。 findRegex().then(...)
也会立即返回另一个承诺。您可以继续在第一个内部执行所需的操作,或者您可以使用另一个.then()扩展promise链。最后但并非最不重要的是,你需要注意这样一个问题的可能性:
findRegex().then(function(data) {
bool = true;
// console.log('data', data);
$scope.regexResponse = data;
regex_all = data.regex_all;
regex_length = data.regex_length;
regex_justCountry = data.regex_justCountry;
regex_justCarriers = data.regex_justCarriers;
console.log('1. regex_justCarriers ', regex_justCarriers);
console.log('1. regex_length ', regex_length);
return data // just in case, if you need it later
}).then(function(data) {
console.log('2. regex_justCarriers ', regex_justCarriers);
}).catch(function(error) {
console.log('something went wrong', error);
})