.then((result)=>{})
запрашивает значение обещания для передачи в функцию.
Ваш пример обещания немного ужасен, так что вот более подходящий пример
const doingStuff=new Promise(function(resolve, reject){
setTimeout(function(){
resolve('hello world');
}, 10000);
});
doingStuff.then(function(result){
console.log(result);
});
console.log('after hello world');
Обратный вызов в .then
вызывается с окончанием тайм-аута. Это асинхронно. Это также означает, что ваша функция в тайм-ауте больше не является анонимной, в случае ошибок обещания ясно покажут обещание do-doStuff с ошибкой.
Если вы запустите это, ваша консоль выдаст
after hello world
hello world
В обратном направлении, это потому, что ваш then
работал через 10 секунд, хотя он появился первым в коде.
Если вы попробуете этот код, ошибка произойдет до разрешения.
const doingStuff=new Promise(function(resolve, reject){
setTimeout(function(){
resolve('hello world');
}, 10000);
setTimeout(function(){
reject(new Error('Something went wrong'));
},5000);
});
doingStuff.then(function(result){
console.log(result);
});
console.log('after hello world');
Ваш консольный журнал покажет точное местоположение, которое пошло не так. И что еще лучше, вы можете обработать ошибку позже, обещание будет сохраняться до тех пор, пока вы не будете готовы, используя .catch(function(e){});
.
const doingStuff=new Promise(function(resolve, reject){
setTimeout(function(){
resolve('hello world');
}, 10000);
setTimeout(function(){
reject(new Error('Something went wrong'));
},5000);
});
doingStuff.then(function(result){
console.log(result);
}).catch(function(e){
console.log('Error message:', e.message);
});
console.log('after hello world');