Giriş
Constructor içindeki metodu çalıştırdıktan sonra resolve veya reject çağrısı yapılır. Bu çağrı sonucunda then() ile takılan metodlar asenkron olarak çağrılır.
then() metodu iki tane parametre alır. Bunlara success() ve error() diyelim. Eğe resolve() çağrılırsa succees() tetiklenir, reject() çağrılırsa error() tetiklenir
Not : PromiseJobs Queue yazısına bakabilirsiniz.
constructor - resolve function
Açıklaması şöyle
Belirtilen işi gecikme ile çalıştırmak için şöyle yaparız.
Açıklaması şöyle.
Şöyle yaparız. Eğer resolve() metodu çağrılırsa promise'in then() metodunun success() parametresi tetiklenir. Eğer reject() metodu çağrılırsa, then() metodunun error() parametresi
Eğer resolve veya reject'in bir tanesi çalışmazsa hata alırız. Açıklaması şöyle.
Parametre olarak verilen tüm işlerin bitmesini bekler. Daha sonra genellikle then() ile devam edilir.
Örnek
Şöyle yaparız
Şöyle yaparız.
İşlev olarak şöyle.
Açıklaması şöyle. İlk resolve() veya reject() edilen şeyi döner.
Elimizde şöyle bir kod olsun
Bitmiş bir Promise döner.
Örnek
Elimizde şöyle bir kod olsun
İmzası şöyle. Promise hazır olunca çalışır.
Reject metodu vermek istemezsek şöyle yaparız.
Success() ve Reject() metodlarını vermek istersek şöyle yaparız.
Success() ve Reject() metodlarını vermek istersek şöyle yaparız.
then() metodu arka arkaya bağlanabilir.
Constructor içindeki metodu çalıştırdıktan sonra resolve veya reject çağrısı yapılır. Bu çağrı sonucunda then() ile takılan metodlar asenkron olarak çağrılır.
then() metodu iki tane parametre alır. Bunlara success() ve error() diyelim. Eğe resolve() çağrılırsa succees() tetiklenir, reject() çağrılırsa error() tetiklenir
Not : PromiseJobs Queue yazısına bakabilirsiniz.
constructor - resolve function
Açıklaması şöyle
Promise constructor runs synchronouslyÖrnek
Belirtilen işi gecikme ile çalıştırmak için şöyle yaparız.
const delay = ms => new Promise(res => setTimeout(res, ms));
constructor - resolve function + reject functionAçıklaması şöyle.
The Promise receives two callbacks in constructor function: resolve and reject. These callbacks inside promises provide us with fine-grained control over error handling and success cases. The resolve callback is used when the execution of promise performed successfully and the reject callback is used to handle the error cases.Örnek
Şöyle yaparız. Eğer resolve() metodu çağrılırsa promise'in then() metodunun success() parametresi tetiklenir. Eğer reject() metodu çağrılırsa, then() metodunun error() parametresi
var p1 = new Promise(function(resolve, reject) {
var num = Math.random();
if (num < .5) {
resolve(num);
} else {
reject(num);
}
});
ÖrnekEğer resolve veya reject'in bir tanesi çalışmazsa hata alırız. Açıklaması şöyle.
If you have promises that occasionally don't resolve or reject and that's not the way they are supposed to work (which it usually isn't), then you just have to fix that.Elimizde şöyle bir kod olsun. Burada parametre olarak 5 verilence Promise ne resolve() ne de reject() metodunu çağırıyor ve hata alıyoruz.
class Utils {
static async thisFunctionOnlyResolvesWhenPassed2AndNeverRejects(number: number){
return new Promise((resolve, reject) => {
if(number === 2) {
resolve('ok')
}
})
}
}
console.log(await Utils.thisFunctionOnlyResolvesWhenPassed2AndNeverRejects(2))
// this will print "ok" because 2 is passed and the promise is resolved
console.log(await Utils.thisFunctionOnlyResolvesWhenPassed2AndNeverRejects(5))
// this will crash the program silently
all metoduParametre olarak verilen tüm işlerin bitmesini bekler. Daha sonra genellikle then() ile devam edilir.
Örnek
Şöyle yaparız
const promises = ...; // Array of Promises
Promise.all(promises).then( response => {
// ...
});
ÖrnekŞöyle yaparız.
Promise.all(requests)
.then((responses) => {
console.log('done');
console.log(responses);
});
catch metoduİşlev olarak şöyle.
.then(null, onRejected)
Hatta eski kütüphanelerde şöyleydi.Promise.prototype.catch = function (onRejected) {
return this.then(null, onRejected);
};
race metoduAçıklaması şöyle. İlk resolve() veya reject() edilen şeyi döner.
ÖrnekThe Promise.race() method returns a promise that fulfills or rejects as soon as one of the promises in an iterable fulfills or rejects, with the value or reason from that promise.
Elimizde şöyle bir kod olsun
function rejectT(t) {
// create potential error here for better opportunity at stack trace
let e = new Error("Promise timed out");
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(e);
reject(e);
}, t);
});
}
function timeout(p, t = 5000) {
return Promise.race([p, rejectT(t)]);
}
Kullanmak için şöyle yaparıztimeout(fn()).then(...).catch(...);
resolve metoduBitmiş bir Promise döner.
Örnek
Elimizde şöyle bir kod olsun
var functArray = [
function() {
console.log("function1 executed");
},
function() {
console.log("function2 executed");
},
function() {
console.log("function3 executed");
},
function() {
console.log("function4 executed");
}];
Şöyle yaparız.funcArray.reduce((p, fn) => {
return p.then(fn => {
fn();
});
}, Promise.resolve());
then metoduİmzası şöyle. Promise hazır olunca çalışır.
.then(onFullfilled, onRejected)
ÖrnekReject metodu vermek istemezsek şöyle yaparız.
p.then(function success(res) {
successes++;
console.log("*Success:* " + res)
})
ÖrnekSuccess() ve Reject() metodlarını vermek istersek şöyle yaparız.
p1.then(function success(res) {
successes++;
console.log("*Success:* " + res);
}, function error(error) {
errors++;
console.log("*Error:* " + error);
});
ÖrnekSuccess() ve Reject() metodlarını vermek istersek şöyle yaparız.
p1.then(function success(res) {
successes++;
console.log("*Success:* " + res);
}, function error(error) {
errors++;
console.log("*Error:* " + error);
});
then metodu ve Promise Chaining
then() metodu arka arkaya bağlanabilir.
Örnek
Şöyle yaparız.
promıse.then(...).then(...).catch(...)
Örnek
Elimizde şöyle bir soru olsun
You have three functions, which are all asynchronous:- loadReport(id) which fetches the definition of a report- runReport(report) which runs the report and returns a path to a PDF output file- sendReport(filePath) which mails the file to subscribers and returns true if succeededWrite code that executes a report using these three functions and shows alert if everything went well. Each of these functions can throw an exception. How would you handle it?
Şöyle yaparız
loadReport(id).then(report => runReport(report)).then(outputPath => sendReport(outputPath)).then(completed => alert(completed ? 'Done!' : 'Bad monkey!')).catch(error => alert(error.message))
Hiç yorum yok:
Yorum Gönder