Ole EH Dufour
Ole EH Dufour

Reputation: 3240

Javascript, promise.then() function executed first

I apologize in advance for overlooking something fundamental but I can't get my head around the following issue.

I want to create a user on the server, subsequently showing all users (including the new one). To simplify things I have put an alert in the "then" clause. The problem is that the alert comes up before the "CreateUser" on the server has completed. According to the doc, "then" is executed when the promise has completed. Why is it the inverse on my pc ?

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

This is the userService.create() function:

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);
}

Thanks a million.

Upvotes: 0

Views: 474

Answers (2)

xianshenglu
xianshenglu

Reputation: 5309

change

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

to:

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  ?');
        });  
}

then

Upvotes: 2

Radonirina Maminiaina
Radonirina Maminiaina

Reputation: 7004

then requires a function to be passed, so do this:

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

Upvotes: 1

Related Questions