টি এল; ডিআর: কারণ +=
সার্চ x
আগে, কিন্তু এটা লিখেছেন পর পরিবর্তিত হয়েছে, কারণে await
তার দ্বিতীয় প্রতীক (ডান দিকে) এ শব্দ।
async
প্রথম await
বিবৃতি না হওয়া পর্যন্ত তারা যখন কল করে ততক্ষণে ফাংশনগুলি সিঙ্ক্রোনজ হয় ।
সুতরাং, যদি আপনি অপসারণ করেন তবে await
এটি একটি সাধারণ ফাংশনের মতো আচরণ করে (ব্যতিক্রমটি এটি এখনও প্রতিশ্রুতি দেয়)।
সেক্ষেত্রে , আপনি কনসোলে 5
এবং পেয়ে 6
যাবেন:
let x = 0;
async function test() {
x += 5;
console.log('x :', x);
}
test();
x += 1;
console.log('x :', x);
প্রথমটি await
সমকালীন চলমান বন্ধ করে দেয়, এমনকি যদি তার যুক্তি সুসংগতভাবে উপলব্ধ হয় তবে নিম্নলিখিতটি ফিরে আসবে 1
এবং 6
যেমনটি আপনি প্রত্যাশা করেছেন:
let x = 0;
async function test() {
// Enter asynchrony
await 0;
x += 5;
console.log('x :', x);
}
test();
x += 1;
console.log('x :', x);
তবে আপনার ক্ষেত্রে কিছুটা জটিল।
আপনি await
একটি প্রকাশের ভিতরে রেখেছেন , এটি ব্যবহার করে +=
।
আপনি সম্ভবত জানেন, যে জেএস x += y
অনুরূপ x = (x + y)
। আমি আরও ভাল বোঝার জন্য পরবর্তী ফর্মটি ব্যবহার করব:
let x = 0;
async function test() {
x = (x + await 5);
console.log('x :', x);
}
test();
x += 1;
console.log('x :', x);
দোভাষী যখন এই লাইনে পৌঁছান ...
x = (x + await 5);
... এটি এর মূল্যায়ন শুরু করে, এবং এটি ...
x = (0 + await 5);
... তারপর, এটি পৌঁছে যায় await
এবং থামে।
ফাংশন কল করার পরে কোডটি চলতে শুরু করে এবং এর মানটি সংশোধন করে x
, তারপরে এটি লগ করে।
x
এখন 1
।
তারপরে, মূল স্ক্রিপ্টটি প্রস্থান করার পরে, দোভাষী আবার বিরামপ্রাপ্ত test
ফাংশনে ফিরে যান এবং সেই রেখার মূল্যায়ন চালিয়ে যান:
x = (0 + 5);
এবং, যেহেতু এর মান x
ইতিমধ্যে প্রতিস্থাপিত হয়েছে, এটি রয়ে গেছে 0
।
পরিশেষে, দোভাষা সংযোজন করে, এতে সঞ্চয় 5
করে x
এবং লগ করে।
আপনি কোনও অবজেক্ট প্রোপার্টি গেটার / সেটারের ভিতরে লগ ইন করে এই আচরণটি পরীক্ষা করতে পারেন (এই উদাহরণে, y.z
এর মান প্রতিফলিত করে x
:
let x = 0;
const y = {
get z() {
console.log('get x :', x);
return x;
},
set z(value) {
console.log('set x =', value);
x = value;
}
};
async function test() {
console.log('inside async function');
y.z += await 5;
console.log('x :', x);
}
test();
console.log('main script');
y.z += 1;
console.log('x :', x);
/* Output:
inside async function
get x : 0 <-- async fn reads
main script
get x : 0
set x = 1
x : 1
set x = 5 <-- async fn writes
x : 5 <-- async fn logs
*/
/* Just to make console fill the available space */
.as-console-wrapper {
max-height: 100% !important;
}
await (x += 5)
এবং এর মধ্যে পার্থক্যটি জানতে হবেx += await 5
।