如何在 angularjs 中等到来自 $resource 请求的响应?
How to wait till the response comes from the $resource request, in angularjs?
我要告诉你一些我在做什么,这样你就可以帮助我。我正在从 .txt 中读取一些记录,对于 each 记录,我需要进行一些验证,为了做到这一点,我对我的后端服务进行了 $resource 调用以获取 regex 将用于验证 每条记录。
我需要等待服务的响应。我有这个(我使用 $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() 中创建所有逻辑,首先是因为我不想每次 [=38] 都进行此调用=] 我从 .txt 中读取了一条记录。我想一次从服务中获取正则表达式,如果我正在检查的第一条记录对我来说是有效记录,则其他记录将使用我在第一次调用服务时已经获得的变量,还有其他原因,但主要是这个,我无法在其中制作我需要的所有代码。
我能做什么?
您的函数 findRegex
正在返回一个 promise 对象,而不是处理后的数据。 findRegex().then(...)
也 returns 立即做出另一个承诺。您可以继续执行第一个 then 中需要的事情,或者您可以使用另一个 .then() 扩展承诺链。最后但并非最不重要的一点是,您需要注意像这样的捕获错误的可能性:
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);
})
我要告诉你一些我在做什么,这样你就可以帮助我。我正在从 .txt 中读取一些记录,对于 each 记录,我需要进行一些验证,为了做到这一点,我对我的后端服务进行了 $resource 调用以获取 regex 将用于验证 每条记录。
我需要等待服务的响应。我有这个(我使用 $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() 中创建所有逻辑,首先是因为我不想每次 [=38] 都进行此调用=] 我从 .txt 中读取了一条记录。我想一次从服务中获取正则表达式,如果我正在检查的第一条记录对我来说是有效记录,则其他记录将使用我在第一次调用服务时已经获得的变量,还有其他原因,但主要是这个,我无法在其中制作我需要的所有代码。
我能做什么?
您的函数 findRegex
正在返回一个 promise 对象,而不是处理后的数据。 findRegex().then(...)
也 returns 立即做出另一个承诺。您可以继续执行第一个 then 中需要的事情,或者您可以使用另一个 .then() 扩展承诺链。最后但并非最不重要的一点是,您需要注意像这样的捕获错误的可能性:
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);
})