如何在angularjs中等待来自$ resource请求的响应?

时间:2018-04-27 15:56:25

标签: javascript angularjs promise resources

我会告诉你一些我在做什么,所以你可以帮助我。我正在阅读.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()中创建所有逻辑,首先是因为我不想每次都进行此调用 我从中读取了一条记录。文本。我想从服务中获取正则表达式一次,如果我检查的第一条记录对我来说是有效的记录,其他的将使用我第一次调用服务时已经获得的变量,还有其他原因,但主要是这个,我无法在其中制作我需要的所有代码。

我该怎么办?

1 个答案:

答案 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);
        })