პრომისების მასივებთან მუშაობა JavaScript-ში
ახლა ჩვენ გავაანალიზებთ ორ სასარგებლო მეთოდს,
რომლებიც საშუალებას გვაძლევს ვიმუშაოთ პრომისების მასივებთან.
მეთოდი Promise.all საშუალებას გვაძლევს შევასრულოთ
კოდი ყველა პრომისის დასრულების შემდეგ, რომლებიც მას
გადაეცა მასივის სახით, ხოლო მეთოდი Promise.race
ელოდება მასივიდან პირველი პრომისის დასრულებას,
გაუქმებდა დანარჩენებს.
ორივე მეთოდი თავის შედეგად აბრუნებს ახალ
პრომისს. მეთოდის Promise.all შემთხვევაში ამ პრომისის შედეგი
იქნება ყველა გადაცემული პრომისის შედეგების
მასივი (შედეგების თანმიმდევრობა
შეესაბამება პრომისების თანმიმდევრობას მასივში),
ხოლო Promise.race - პირველი
შესრულებული პრომისის შედეგი.
მოდით ვნახოთ პრაქტიკაში. დავუშვათ, რომ ჩვენ გვაქვს პრომისების მასივი:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
მოდით Promise.all-ის საშუალებით
ვიცადოთ ჩვენი მასივის ყველა პრომისის
დასრულებას:
Promise.all(promises).then(function(res) {
console.log(res); // გამოიტანს [1, 2, 3] - ყველა პრომისის შედეგები
});
ახლა კი Promise.race-ის საშუალებით ვიცადოთ
პრომისებიდან პირველის დასრულებას:
Promise.race(promises).then(function(res) {
console.log(res); // გამოიტანს 1 - პირველი შესრულებული პრომისის შედეგი
});
თუ მასივში ერთი არანაკლებ პრომისი
უარყოფილი იქნება, მაშინ პრომისი შედეგით მაშინვე
გადავა მდგომარეობაში rejected. ამიტომ
წარმოქმნილი გამონაკლისი შეგვიძლია დავიჭიროთ ჩვეულებრივი,
უკვე თქვენ მიერ შესწავლილი გზით, მაგალითად,
catch-ის საშუალებით:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
შექმენით ფუნქცია, რომელიც აბრუნებს პრომისს, რომლის შიგნით
დაყენებულია შემთხვევითი დაყოვნება
1-დან 10 წამამდე. პრომისმა თავის
შედეგად უნდა დააბრუნოს ეს დაყოვნება.
ციკლის და თქვენი ფუნქციის საშუალებით შეავსეთ
მასივი 10 პრომისით.
წინა ამოცანის პრომისების მასივის გამოყენებით გააკეთეთ ისე, რომ კონსოლში გამოიყვანოს პირველი შესრულებული პრომისის შედეგი.
წინა ამოცანის პრომისების მასივის გამოყენებით გააკეთეთ ისე, რომ კონსოლში გამოიყვანოს ყველა პრომისის შედეგების ჯამი.