JavaScript-те дайын промистерді жасау
Кейде сізге әлдеқашан орындалған промис құру
қажет болуы мүмкін. Ол үшін екі әдіс бар:
Promise.resolve әдісі сәтті орындалған промис
жасайды, Promise.reject әдісі қабылданбаған
промис жасайды. Бұл әдістер параметр ретінде
промис нәтижесі немесе қатесі болатын нәрсені
сәйкесінше алады.
Бізге дайын промис қашан қажет болуы мүмкін? Мысал қарастырайық. Бізде санды параметр ретінде қабылдайтын, оны асинхронды түрде өңдейтін және нәтижесімен промис қайыратын бір функция бар делік:
function func(num) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
}
Біз функциямызды келесі түрде қолданамыз:
func(5).then(function(res) {
console.log(res); // 25 шығарады
});
Енді біз шештік делік, асинхронды операциямызды тек нөлден үлкен сан берілген жағдайда ғана орындаймыз. Қарсы жағдайда функцияның нәтижесі нөл болуы керек:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else {
return 0; // нөлдік нәтиже
}
}
Алайда, енді функция промис немесе сан қайтарады.
Осының салдарынан функция нәтижесіне then
әдісін қолдана алмаймыз, өйткені функция сан
қайтарған жағдайда біз қате аламыз:
func(0).then(function(res) { // қате, then әдісін нөлге қолдану
});
Мәселені шешуге Promise.resolve көмектеседі:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else {
return Promise.resolve(0); // сан емес, промис қайтарамыз
}
}
Енді біз шештік делік, берілген нөл үшін нөл
қайтару керек, ал нөлден кіші сандар үшін
ескерту қайтару керек. Бұл жағдайда Promise.reject
әдісі көмектеседі:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else if (num === 0) {
return Promise.resolve(0);
} else {
return Promise.reject('incorrect number'); // қабылданбаған промис қайтарамыз
}
}