অপেক্ষা কীওয়ার্ড

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 77)।

কোথায় 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;
}

আরও দেখুন