Как ждать ответа от запроса $ resource в angularjs? - PullRequest
0 голосов
/ 27 апреля 2018

Я расскажу вам немного о том, что я делаю, чтобы вы могли мне помочь. Я читаю некоторые записи из .txt, и для каждой записи мне нужно провести некоторые проверки, для этого я делаю вызов $ 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 () , прежде всего потому, что я не хочу делать этот вызов каждый раз Я читаю запись из .txt , Я хочу получить регулярное выражение из службы один раз, и если эта первая запись, которую я проверяю, является действительной для меня, остальные будут использовать переменные, которые я уже получил при первом вызове службы, есть и другие причины, но в основном это, я не могу сделать весь код, который мне нужен внутри этого.

Что я могу сделать?

1 Ответ

0 голосов
/ 27 апреля 2018

Ваша функция findRegex возвращает объект обещания, а не обработанные данные. findRegex().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);
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...