টি এল; ডিআর
Promise.all
সমান্তরাল ফাংশন কলগুলির জন্য ব্যবহার করুন , ত্রুটি হওয়ার সময় উত্তর আচরণ সঠিকভাবে হয় না।
প্রথমে একবারে সমস্ত অ্যাসিক্রোনাস কলগুলি সম্পাদন করুন এবং সমস্ত Promise
বস্তু প্রাপ্ত করুন । দ্বিতীয়ত, বস্তুগুলিতে ব্যবহার await
করুন Promise
। এইভাবে, আপনি প্রথম অপেক্ষারত Promise
অন্য সমাধানের জন্য অপেক্ষাকৃত কলগুলি এখনও চলছে। সামগ্রিকভাবে, আপনি কেবলমাত্র সবচেয়ে ধীর অ্যাসিনক্রোনাস কল হিসাবে অপেক্ষা করবেন। উদাহরণ স্বরূপ:
// Begin first call and store promise without waiting
const someResult = someCall();
// Begin second call and store promise without waiting
const anotherResult = anotherCall();
// Now we await for both results, whose async processes have already been started
const finalResult = [await someResult, await anotherResult];
// At this point all calls have been resolved
// Now when accessing someResult| anotherResult,
// you will have a value instead of a promise
জেএসবিন উদাহরণ: http://jsbin.com/xerifanima/edit?js,console
ক্যাভ্যাট:await
কলগুলি একই লাইনে বা বিভিন্ন লাইনে রয়েছে তা বিবেচ্য নয় , এতক্ষণ যতক্ষণ না সমস্ত অ্যাসিক্রোনাস কলের পরে প্রথম await
কলটি ঘটে । জনিএইচকে এর মন্তব্য দেখুন।
আপডেট করুন: এই উত্তর হ্যান্ডলিং অনুযায়ী ভুলবশত একটি ভিন্ন সময়জ্ঞান হয়েছে @ bergi এর উত্তর , এটা নেই না ত্রুটি বর্জন যেমন ত্রুটি দেখা দেয় কিন্তু পরে সব প্রতিশ্রুতি মৃত্যুদন্ড কার্যকর করা হয়। আমি ফলাফল @ জনি এর টিপ সঙ্গে তুলনা করুন:, [result1, result2] = Promise.all([async1(), async2()])
নিম্নলিখিত কোড স্নিপেট চেক
const correctAsync500ms = () => {
return new Promise(resolve => {
setTimeout(resolve, 500, 'correct500msResult');
});
};
const correctAsync100ms = () => {
return new Promise(resolve => {
setTimeout(resolve, 100, 'correct100msResult');
});
};
const rejectAsync100ms = () => {
return new Promise((resolve, reject) => {
setTimeout(reject, 100, 'reject100msError');
});
};
const asyncInArray = async (fun1, fun2) => {
const label = 'test async functions in array';
try {
console.time(label);
const p1 = fun1();
const p2 = fun2();
const result = [await p1, await p2];
console.timeEnd(label);
} catch (e) {
console.error('error is', e);
console.timeEnd(label);
}
};
const asyncInPromiseAll = async (fun1, fun2) => {
const label = 'test async functions with Promise.all';
try {
console.time(label);
let [value1, value2] = await Promise.all([fun1(), fun2()]);
console.timeEnd(label);
} catch (e) {
console.error('error is', e);
console.timeEnd(label);
}
};
(async () => {
console.group('async functions without error');
console.log('async functions without error: start')
await asyncInArray(correctAsync500ms, correctAsync100ms);
await asyncInPromiseAll(correctAsync500ms, correctAsync100ms);
console.groupEnd();
console.group('async functions with error');
console.log('async functions with error: start')
await asyncInArray(correctAsync500ms, rejectAsync100ms);
await asyncInPromiseAll(correctAsync500ms, rejectAsync100ms);
console.groupEnd();
})();