Javascript, функция promise.then() выполняется первой

avatar
Ole EH Dufour
8 апреля 2018 в 07:36
186
2
0

Заранее прошу прощения за то, что упустил что-то фундаментальное, но я не могу понять следующую проблему.

Я хочу создать пользователя на сервере, а затем показать всех пользователей (включая нового). Чтобы упростить вещи, я поместил предупреждение в предложение «тогда». Проблема в том, что предупреждение появляется до завершения «CreateUser» на сервере. Согласно документу, «затем» выполняется, когда обещание выполнено. Почему на моем компьютере все наоборот?

function createUser(newUser) {   
    userService.create(newUser) // Post creating new user
        .then(      
        alert('Why do I come up before completion of the  userService.create() function  ?')
        );  
}

Это функция userService.create():

function create(user) {
//    alert(user);
    const requestOptions = {
        method: 'POST',
        headers: { ...authHeader(), 'Content-Type': 'application/json' },
        body: user
    };

    return fetch('/Client/Create', requestOptions).then(handleResponse, handleError);
}

handleResponse:

function handleResponse(response) {
    return new Promise((resolve, reject) => {

....

handleError:

function handleError(error) {
    return Promise.reject(error && error.message);
}

Миллион благодарностей.

Источник
Axnyff
8 апреля 2018 в 07:38
1

Вы напрямую вызываете оповещение, вам нужно поместить функцию, которая вызывает оповещение, в ваш метод then

Daniel Krom
8 апреля 2018 в 07:40
0

.then(()=>{alert('...')})

Ole EH Dufour
8 апреля 2018 в 07:47
0

@DanielKrom Вот и все! Спасибо большое. Синтаксис EC6 еще более элегантен, чем использование функции.

Ответы (2)

avatar
xianshenglu
8 апреля 2018 в 07:41
2

изменить

function createUser(newUser) {   
    userService.create(newUser) // Post creating new user
        .then(      
        alert('Why do I come up before completion of the  userService.create() function  ?')
        );  
}

до:

function createUser(newUser) {   
    userService.create(newUser) // Post creating new user
        .then(function(){
          alert('Why do I come up before completion of the  userService.create() function  ?');
        });  
}

затем

Ole EH Dufour
8 апреля 2018 в 07:46
0

Вы герой. Я рвал на себе волосы.

avatar
Radonirina Maminiaina
8 апреля 2018 в 07:46
1

then требует передачи функции, поэтому сделайте следующее:

userService.create(newUser).then(() => {
    alert('Why do I come up before completion of the  userService.create() function  ?')
});