Как дождаться возвращаемого значения вызова функции, прежде чем перейти к следующей строке в angular js

У меня есть две функции is_exist() и save(). В функции сохранения я вызываю функцию is_exist() перед выполнением функции save.it, возвращающей логическое значение. но моя проблема в том, что функция save() не ждет, пока функция is_exist() вернет значение. После того, как функция is_exist() вызвала ее просто перейти к следующей строке и продолжить выполнение следующих строк, после завершения save() функция is_exist() возвращает значение

var app = angular.module('my_app', [])
app.controller('my_con', ['$scope', '$http', function($scope, $http) {

    $scope.save = function(sector) {
        var del_status = $scope.is_exist(sector);

        console.log(del_status); // is_exsis return value

        if(!del_status) {
            // save
        }
    }

    $scope.is_exist = function(sector) {
        $http({
            method : 'POST',
            url : '/is_data_exist',
            contentType : 'application/json; charset=utf-8',
            data : angular.toJson({
                'sector': sector
            }),
            dataType: 'json',
        }).then(function successCallback(response) {

            console.log(response.data); //http respond

            if(response.data == 'False') {
                return false;
            }
            else {
                return true;
            }
        })
    }
}])

есть ли способ дождаться, пока функция is_exsis() вернет значение, а затем перейти к следующей строке


person user6900333    schedule 12.06.2017    source источник
comment
он асинхронный, значит, вы не можете, потому что вы не знаете, когда обещание будет разрешено. Что вы можете сделать, так это передать следующий код как функцию вашему обещанию, чтобы обещание выполнило его. что-то вроде var del_status = $scope.is_exist(sector, function(){ console.log(del_status); /* etc */ }); (осторожно, у вас опечатка, exists != exsis)   -  person Kaddath    schedule 12.06.2017
comment
дубликат: stackoverflow.com/questions/14220321/   -  person Nevosis    schedule 12.06.2017
comment
@Nevosis ссылка на ваш ссылка об ajax, а мой вопрос об angularjs   -  person user6900333    schedule 12.06.2017
comment
Моя ссылка и ваш вопрос об асинхронном вызове в javascript. Это то же самое в angular, react, ajax, jquery, nodejs и т. д. Как обрабатывать асинхронный вызов в js? В основном обещания и обратные вызовы.   -  person Nevosis    schedule 12.06.2017


Ответы (2)


Используйте функцию callback в $scope.is_exsis(sector); и выполните это действие внутри функции обратного вызова -

 var del_status = $scope.is_exsis(function(data){
    console.log(del_status); // is_exsis return value

    if(!del_status) {
        // save
    }
 });
person Rudraksh Pathak    schedule 12.06.2017

Вы должны иметь возможность вернуть обещание, а затем связать его, чтобы сохранение не было завершено, пока не будет выполнено is_exists.

$scope.save = function(sector) {
    $scope.is_exsis(sector).then(function(del_status){

        console.log(del_status); // is_exsis return value

        if(!del_status) {
        // save
        }
   });

}

$scope.is_exist = function(sector) {
    return $http({
        method : 'POST',
        url : '/is_data_exist',
        contentType : 'application/json; charset=utf-8',
        data : angular.toJson({
            'sector': sector
        }),
        dataType: 'json',
    }).then(function successCallback(response) {

        console.log(response.data); //http respond

        if(response.data == 'False') {
            return false;
        }
        else {
            return true;
        }
    })
}
person JoshSommer    schedule 12.06.2017