টি এল; ডিআর: কারণ +=সার্চ 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।