1

Есть функция которая делает запрос ajax:

let Ajax = function (url, data) {
        $.ajax({
            type: 'POST',
            url: url,
            data: data,
            dataType: 'json',
            success: function(result) {
                let deferred = $.Deferred();
                deferred.resolve(result);
                return deferred.promise();
            },
            complete: function () {},
            error: function (jqXHR) {

            }
        })
    };

Есть условие:

if(new Action().isUser()) {
    ...
} else {
    ....
}

Action:

function Action() {
      ....

        this.isUser = function () {
            return $.when(Ajax(getServer() + 'check', {}).then(function (result) {
                console.log('RESULT');
                return result.isUser;
            }));
        };
      .....
}

Но вот проблема в том что в условие приходит false и код идет дальше, а then срабатывает позже. Что я делаю не так подскажите пожалуйста.

Tsyklop
  • 3,847

1 Answers1

2

Сейчас вы не возвращаете promise из функции Ajax, он возвращается из success обработчика, так же when здесь не нужен. $.ajax сам возвращает promise, по этому ваш код можно упростить до следующего: https://jsfiddle.net/qpo8rxnv/1/

function Ajax(url, data)
{
    return $.ajax({
        type: 'POST',
        url: url,
        data: { json: JSON.stringify(data) }
  });
};

Ajax('/echo/json/', { data: 5 })
    .done(result=> console.log(result))
    .fail(err=> console.error('ERROR'));

Если делать в том стиле, что делаете вы то код должен выглядеть так:

function Ajax(url, data)
{
    const deferred = $.Deferred();
    $.ajax({
        type: 'POST',
        url: url,
        data: { json: JSON.stringify(data) },
        success: result => deferred.resolve(result)
    })
    return deferred;
};

Ajax('/echo/json/', { data: 5 }).then(r=> console.log(r));
0xSA
  • 449
  • 2
  • 7