CyrefJS
CCyrefJS
EN
بازگشت به مستندات
تابع/از نسخه 1.38.0

once

تابعی ایجاد می‌کند که تابع داده‌شده را فقط یک بار اجرا می‌کند و در فراخوانی‌های بعدی همان نتیجه اولین اجرا را برمی‌گرداند.

once(fn):(...args: TArgs) => TResult

پارامترها

fn(...args: TArgs) => TResultالزامی

تابعی که باید فقط یک بار اجرا شود.

مقدار بازگشتی

(...args: TArgs) => TResult

تابعی را برمی‌گرداند که تابع اصلی را فقط در اولین فراخوانی اجرا می‌کند و پس از آن نتیجه ذخیره‌شده را برمی‌گرداند.

مثال‌ها

01

استفاده پایه

تابع اصلی فقط در اولین فراخوانی اجرا می‌شود.

TypeScript
const initialize = once(() => {
  console.log("Initialized");
  return "ready";
});

console.log(initialize());
// Initialized
// ready

console.log(initialize());
// ready

console.log(initialize());
// ready
02

استفاده مجدد از نتیجه اولین اجرا

پس از اولین اجرا، نتیجه ذخیره‌شده حتی در صورت استفاده از آرگومان‌های متفاوت در فراخوانی‌های بعدی برگردانده می‌شود.

TypeScript
const getValue = once((value: number) => value * 2);

console.log(getValue(5));
// 10

console.log(getValue(10));
// 10

console.log(getValue(20));
// 10
03

ارسال چند آرگومان

تمام آرگومان‌های اولین فراخوانی به تابع اصلی ارسال می‌شوند.

TypeScript
const createMessage = once(
  (name: string, age: number) => {
    return `${name} is ${age} years old`;
  },
);

console.log(createMessage("Amir", 20));
// Amir is 20 years old

console.log(createMessage("Ali", 25));
// Amir is 20 years old
04

مناسب برای مقداردهی اولیه

وقتی یک عملیات فقط باید در اولین فراخوانی انجام شود، می‌توان از once استفاده کرد.

TypeScript
const setup = once(() => {
  console.log("Setup completed");
  return true;
});

setup();
// Setup completed

setup();
// No output
05

تابع اصلی دوباره اجرا نمی‌شود

پس از اجرای تابع، فراخوانی‌های بعدی بدون اجرای مجدد تابع اصلی، نتیجه ذخیره‌شده را برمی‌گردانند.

TypeScript
let count = 0;

const increment = once(() => {
  count += 1;
  return count;
});

console.log(increment());
// 1

console.log(increment());
// 1

console.log(count);
// 1
ساخته شده با@cyref/js·مستندات رسمی