return
Amaç reddi sonra fonksiyonunun uygulanmasını sona erdirme ve ondan sonra kod yürütülmesini önlemek içindir.
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
return; // The function execution ends here
}
resolve(numerator / denominator);
});
}
Bu durumda resolve(numerator / denominator);
, kesinlikle gerekli olmayan çalıştırılmasını engeller . Bununla birlikte, gelecekte olası bir tuzağı önlemek için yürütmeyi sonlandırmak hala tercih edilir. Ayrıca, kodun gereksiz yere çalıştırılmasını önlemek için iyi bir uygulamadır.
Arka fon
Bir söz 3 durumdan birinde olabilir:
- bekleyen - başlangıç durumu. Beklemeden diğer eyaletlerden birine geçebiliriz
- yerine getirildi - başarılı operasyon
- reddedildi - başarısız işlem
Bir söz yerine getirildiğinde veya reddedildiğinde, bu durumda süresiz olarak kalır (kararlaştırılır). Dolayısıyla, yerine getirilen bir sözü reddetmek veya reddedilen bir sözü yerine getirmek, etkili olmayacaktır.
Bu örnek pasaj, sözün reddedildikten sonra yerine getirilmesine rağmen reddedildiğini göstermektedir.
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
}
resolve(numerator / denominator);
});
}
divide(5,0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
Öyleyse neden geri dönmemiz gerekiyor?
Yerleşik bir vaat durumunu değiştiremesek de, reddetmek veya çözmek fonksiyonun geri kalanının yürütülmesini durdurmaz. İşlev, kafa karıştırıcı sonuçlar yaratacak bir kod içerebilir. Örneğin:
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
}
console.log('operation succeeded');
resolve(numerator / denominator);
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
İşlev şu anda böyle bir kod içermiyor olsa bile, bu olası bir gelecekteki tuzak oluşturur. Gelecekteki bir refactor, söz verildikten sonra kodun hala yürütüldüğünü görmezden gelebilir ve hata ayıklamak zor olacaktır.
Çözme / reddetme işleminden sonra yürütmeyi durdurma:
Bu standart JS kontrol akışı şeyleridir.
- Sonra İade
resolve
/ ' reject
:
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
return;
}
console.log('operation succeeded');
resolve(numerator / denominator);
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
- İle Dönüş
resolve
/ reject
- callback'inde dönüş değeri göz ardı edilir, çünkü biz / gidermek ifadeyi reddetmek dönerek bir çizgi kaydedebilirsiniz:
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
return reject("Cannot divide by 0");
}
console.log('operation succeeded');
resolve(numerator / denominator);
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
- Bir if / else bloğu kullanma:
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
} else {
console.log('operation succeeded');
resolve(numerator / denominator);
}
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
return
Kod düz olduğundan seçeneklerden birini kullanmayı tercih ederim .