php666
@php666
PHP-макака

Как правильно сделать Promise?

Есть функция foo(), в которой идет обращение через AJAX к серверу и строится select-список. Необходимо сделать так, что бы код в блоке then сработал только после того, как будет отрисован select-список.

let promise = new Promise(function (resolve, reject) {
    foo();
});
promise.then(result => {
    alert('done')
});


Я хотел resolve() поместить в foo():

function foo() {
    $.ajax({
        url: ......,
        type: 'get',
        dataType: 'json',
        data: data,
        success: function(data) {
            // ....
            resolve();
        },
        error: function(xhr, textStatus, errorThrown) {
            // ...
        }
    }
}


но возникает ошибка:

Uncaught ReferenceError: resolve is not defined

Я так понимаю, что resolve нельзя помещать во вложенную функцию? Можно как-то это исправить?
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
вариант 1.
let promise = new Promise(foo);
promise.then(result => {
    alert('done')
});



function foo(resolve, reject) {
    $.ajax({
        url: ......,
        type: 'get',
        dataType: 'json',
        data: data,
        success: function(data) {
            // ....
            resolve(data);
        },
        error: function(xhr, textStatus, errorThrown) {
            // ...
            reject(textStatus);
        }
    }
}


вариант 2.
let promise = new Promise(function (resolve, reject) {
    $.ajax({
        url: ......,
        type: 'get',
        dataType: 'json',
        data: data,
        success: function(data) {
            // ....
            resolve(data);
        },
        error: function(xhr, textStatus, errorThrown) {
            reject(textStatus);
        }
    }
});
promise.then(result => {
    alert('done')
});


вариант 3.
let promise = new Promise(function (resolve, reject) {
    foo(resolve, reject);
});
promise.then(result => {
    alert('done')
});



function foo(resolve, reject) {
    $.ajax({
        url: ......,
        type: 'get',
        dataType: 'json',
        data: data,
        success: function(data) {
            // ....
            resolve(data);
        },
        error: function(xhr, textStatus, errorThrown) {
            // ...
            reject(textStatus);
        }
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект