Promise.then() - повертає Promise який є результатом виконання.
Promise.then( onFulfilled onRejected , onProgress );
Promise - об'єкт Promise.
onFulfilled - . функція яка викликається коли Promise виконується. Ця функція приймає лише один параметр value.
onRejected - не обов'язково вказувати. Функція яка викликається коли Promise провалився (не виконався по певним причинам). Ця функція приймає один параметр reason.
onProgress - не обов'язково вказувати. Функція яка виконується коли Promise в процесі роботи. Не всі браузери підтримують параметр onProgress.
then() метод об'єкту Promise який повертає об'єкт Promise який є результатом виконання функції onFulfilled.
Метод приймає два параметра (у деяких браузерах три): функції зворотного виклику для випадків успіху і провалу Promise.
var p = new Promise(function(result, error, onprogress){
var xhr = new XMLHttpRequest();
xhr.open("get","", true);
xhr.onload=function(){
result(this.response);
}
xhr.onerror=function(e){error(e);}
xhr.onprogress=function(e){progress(e.loaded);}
xhr.send(null);
});
p.then(function(a){alert(a);}, function(er){alert("Помилка: "+er);}, function(b){alert(b);});
Так як then i catch повертає об'єкт Promise це дає можливість бути зв'язаним в ланцюжок:
function getJson(url){
return new Promise(function(resolve, reject){
var x= new XMLHttpRequest();
x.open("get", url, true);
x.onload=function(){
resolve(this.response);
};
x.onerror=function(){reject(new Error("Error AJAX"));}
x.send();
});
}
getJson("test.json").then(function(a){return JSON.parse(a);}).catch(function(){alert("не вдалося перетворити отримані дані в JSON");}).then(function(b){"Отримано. result.name: "+alert(b.name);});