অপেক্ষা কীওয়ার্ড
wait হলো bnlang-এর asynchronous-value অপারেটর। একটি Future দেওয়া হলে, wait বর্তমান ফাংশন frame-কে suspend রাখে যতক্ষণ না Future settle হয়; তারপর resolved value সহ continue করে। Future reject হলে wait সেই rejection value throw করে — try / catch-এ ধরা যায়। বাংলা রূপ অপেক্ষা সমার্থক।
কোনো async marker নেই। যে ফাংশনের body-তে wait আছে — সে স্বয়ংক্রিয়ভাবে caller-কে একটি Future ফেরত দেয়; caller হয় wait করে, নয়তো .next / .fail chain করে।
Syntax
wait <future_expr>
<future_expr> হলো এমন যেকোনো expression যা একটি Future-এ evaluate হয়। Future নয় এমন মান auto-wrap হয় (wait 7 → 7)।
কোথায় wait ব্যবহার যায়
wait কোনো expression-যোগ্য জায়গায় parse হয়, কিন্তু runtime-এ এই পজিশনগুলোই সাপোর্ট করে (ফাংশন body-র ভেতরে):
varডিক্লেয়ারেশনের initializer-এ:var x = wait expr;- বেয়ার expression statement:
wait expr; if/elseশাখা,while,for-of, ওtry/catchব্লকের ভেতরে — প্রতিটির top-level-এ।
এখনো নেই: sub-expression (f(wait g())), finally ব্লক, C-style for (init; cond; update), বা script body-র top-level-এ। আগে একটি var-এ ফল রাখুন।
উদাহরণ
সাধারণ — একটি network call
import "request" as r;
function fetch_user(id) {
var resp = wait r.get("https://api.example.com/users/" + str(id));
return resp.data;
}
function main() {
var user = wait fetch_user(7);
print("hello,", user.name);
}
main().fail(function (e) { print("error:", e); });
Rejection ধরা
try / catch wait-এর সাথে নির্বিঘ্নে কাজ করে — rejected Future thrown value হিসেবে আসে।
function safe_fetch(url) {
try {
var resp = wait r.get(url);
return resp.body;
} catch (e) {
return "fallback: " + str(e);
}
}
Sequential বনাম parallel
পরপর call wait করলে একের পর এক চলে:
var a = wait r.get(url_a);
var b = wait r.get(url_b); // a শেষ হলে শুরু
Parallel-এর জন্য আগে Future-গুলো শুরু করুন, তারপর combined-এ wait:
var pending_a = r.get(url_a);
var pending_b = r.get(url_b);
var both = wait Future.all([pending_a, pending_b]);
Sleep
import "timers" as timers;
function paced() {
print("a");
wait timers.delay(100);
print("b 100ms পরে");
}
স্বয়ংক্রিয় Future return
যে ফাংশনের body-তে wait আছে — সে caller-কে একটি Future ফেরত দেয়। এটি async কীওয়ার্ড দিয়ে opt-in নয় — body wait ব্যবহার করছে কি না সেটাই নির্ধারক।
function plain() { return 7; } // 7 ফেরত
function uses_wait() { return wait Future.of(7); } // 7-এ fulfilled Future ফেরত
Sync ফাংশন uses_wait() কল করে wait উপেক্ষা করলে value পাবে না, Future পাবে। তাই যেখানে value দরকার, সেখানে wait-ই করুন:
function caller() {
var x = wait uses_wait(); // x = 7
print(x);
}
বাংলা রূপ
ফাংশন fetch() {
চলক resp = অপেক্ষা r.get(url);
ফেরত resp.body;
}
আরও দেখুন
Future—waitযার উপর কাজ করে।try/catch— rejection ধরা।request,io,timers— Future-returning stdlib।