Условное угловое обещание - PullRequest
       32

Условное угловое обещание

0 голосов
/ 25 сентября 2018

Моя директива Angular v1.x вызывает функцию при нажатии кнопки, и в зависимости от ввода я устанавливаю некоторые переменные:

$scope.offerRespond = function() {

        if (offer.i.offerResponse == 1) {  
             // set some variables
        }

        else if (offer.i.offerResponse == 0) { 

             $http({method: 'GET', url: frontbaseurl+'/offer_types/' + id + '.json'})
             .then(function successCallback(response) { 
                  $scope.reason = response.data.data.name;
             }, function errorCallback() {
                  $scope.reason = "Unknown";
             }

        );

        $http.post(frontbaseurl+'/purchases.json', JSON.stringify(dataObj))
        .then(function(response){ 

             // continue....

        }
}

Как видно, я делаю запрос GET, если offerResponse == 0. Это кажется рискованным, потому что код продолжает выполняться без получения ответа от запроса.Я знаю, что подход состоит в том, чтобы использовать «обещание», но как это применимо в этом случае, если запрос GET может быть не сделан?= 1 обещание не может быть выполнено, поскольку запрос GET не был бы выполнен.

Есть предложения, пожалуйста?

1 Ответ

0 голосов
/ 25 сентября 2018

Мне пришлось сделать нечто подобное в нашем приложении angular 1.x, используя Typescript, например:

public myFunc = async (id): Promise<void> => {
    return new Promise<void>(async (resolve, reject) => {
        if (this.offer.i.offerResponse === 1) {  
            // set some variables
            resolve();
        }
        else if (this.offer.i.offerResponse === 0) { 

            try {
                const response = await services.getOfferTypes(id);
                this.reason = response.data.data.name;
                resolve();
            } catch (errorResponse) {
                this.reason = "Unknown";
                reject();
            }
        }
    });
}

Обратите внимание, что я "инкапсулировал" ваш http-запрос в сервисную функцию.Мне нравится разделять вызовы API в их собственном сервисе, чтобы все было чисто и легко читалось.Этот код не проверен, но если я правильно помню, он должен работать примерно так.

...