تابع/از نسخه
1.38.0once
تابعی ایجاد میکند که تابع دادهشده را فقط یک بار اجرا میکند و در فراخوانیهای بعدی همان نتیجه اولین اجرا را برمیگرداند.
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());
// ready02
استفاده مجدد از نتیجه اولین اجرا
پس از اولین اجرا، نتیجه ذخیرهشده حتی در صورت استفاده از آرگومانهای متفاوت در فراخوانیهای بعدی برگردانده میشود.
TypeScript
const getValue = once((value: number) => value * 2);
console.log(getValue(5));
// 10
console.log(getValue(10));
// 10
console.log(getValue(20));
// 1003
ارسال چند آرگومان
تمام آرگومانهای اولین فراخوانی به تابع اصلی ارسال میشوند.
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 old04
مناسب برای مقداردهی اولیه
وقتی یک عملیات فقط باید در اولین فراخوانی انجام شود، میتوان از once استفاده کرد.
TypeScript
const setup = once(() => {
console.log("Setup completed");
return true;
});
setup();
// Setup completed
setup();
// No output05
تابع اصلی دوباره اجرا نمیشود
پس از اجرای تابع، فراخوانیهای بعدی بدون اجرای مجدد تابع اصلی، نتیجه ذخیرهشده را برمیگردانند.
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·مستندات رسمی