如何在 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);
        })