JavaScript'te Çözülmüş Promise'ler Oluşturma

Bazen zaten çözülmüş bir promise oluşturmanız gerekebilir. Bunun için iki yöntem vardır: Promise.resolve yöntemi başarıyla çözülmüş bir promise oluşturur, Promise.reject yöntemi ise reddedilmiş bir promise oluşturur. Bu yöntemler parametre olarak, sırasıyla promise'in sonucu veya hatası olacak şeyi alır.

Zaten çözülmüş bir promise ne zaman gerekli olabilir? Bir örnek üzerinden inceleyelim. Bir sayıyı parametre olarak alan, onunla eşzamansız olarak bir şeyler yapan ve sonuçla birlikte bir promise döndüren bir fonksiyonumuz olsun:

javascriptfunction func(num) {
  return new Promise(function(resolve) {
    setTimeout(function() {
      resolve(num * num);
    }, 3000);
  });
}

Fonksiyonumuzu şu şekilde kullanacağız:

javascriptfunc(5).then(function(res) {
  console.log(res); // 25 yazdıracak
});

Şimdi diyelim ki, eşzamansız işlemi yalnızca sıfırdan büyük bir sayı verilirse gerçekleştirmeye karar verdik. Aksi takdirde, fonksiyonun sonucu sıfır olmalı:

javascriptfunction func(num) {
  if (num > 0) {
    return new Promise(function(resolve) {
      setTimeout(function() {
        resolve(num * num);
      }, 3000);
    });
  } else {
    return 0; // sıfır sonuç
  }
}

Ancak, şimdi fonksiyonun bir promise VEYA bir sayı döndürdüğü ortaya çıkıyor. Bu nedenle, fonksiyonun sonucuna then yöntemini artık uygulayamayız, çünkü fonksiyon bir sayı döndürdüğünde bir hata alırız:

javascriptfunc(0).then(function(res) { // hata, then metodunu sıfıra uyguluyoruz
  
});

Bu sorunu Promise.resolve ile düzeltebiliriz:

javascriptfunction func(num) {
  if (num > 0) {
    return new Promise(function(resolve) {
      setTimeout(function() {
        resolve(num * num);
      }, 3000);
    });
  } else {
    return Promise.resolve(0); // sayı değil, promise döndürüyoruz
  }
}

Şimdi diyelim ki, iletilen sıfır için sıfır döndürmemiz, sıfırdan küçük sayılar için ise bir istisna oluşturmamız gerektiğine karar verdik. Bu durumda Promise.reject yöntemi bize yardımcı olacaktır:

javascriptfunction 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'); // reddedilmiş bir promise döndür
  }
}