Promise object is your tatget.
Promise has three states:
Pending, Fulfilled, and Rejected.
- Pending state is the initial state wich is waiting for response.
- Fulfilled state indicates the asynchronous operation run success.
- Rejected state is opposit from Fulfilled, means the operation falied.
Before any function call of
resolve or reject,
A modifiled example code form mozilla developer network
/******************************/
/* javascript for client site */
/******************************/
"use strict";
// to show that setTimeout function will run after the script reach the end
setTimeout(function(){
console.log("setTimeout run after 0 second delay");
},0)
console.log("script start");
var test = new Promise(function(resolve, reject){
console.log("promise: enter construction");
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function(){
if (this.readyState == 4 && this.status == 200) {
console.log("promise: before resolve");
var temp = this.responseText;
resolve(temp);
console.log("promise: after resolve");
}
}
xhttp.open("GET", "http://localhost:8080/server.php", true);
xhttp.send();
console.log("promise: leave construction");
})
test.then(function(para){
console.log("promise: then " + 'value: '+para);
},function(para){
console.log("promise: catch");
})
setTimeout(function(){
console.log("setTimeout run after 2 second delay");
},2000)
setTimeout(function(){
console.log("setTimeout run after 5 second delay");
},5000)
console.log("script end")
/****************************/
/* php for server site */
/* simulate network latency */
/****************************/
function jsPromsieTest(){
sleep(3);
echo "message return after 3 second called";
}
jsPromsieTest();
The console log output result
script start
promise: enter executor
promise: leave executor
script end
setTimeout run after 0 second delay
setTimeout run after 2 second delay
promise: before resolve
promise: after resolve
promise: then value: message return after 3 second called
setTimeout run after 5 second delay