---
title: Function.InvokeAfter – เรียกใช้ฟังก์ชันหลังจากเวลาที่ระบุ
url: https://www.thepexcel.com/functions/power-query/function-values/function-invokeafter/
type: function-explainer
program: Power Query
syntax: "Function.InvokeAfter(function as function, delay as duration) as any"
date: 2025-12-12
updated: 2025-12-26
scores:
  popularity: 3
  difficulty: 7
  usefulness: 4
---

# Function.InvokeAfter – เรียกใช้ฟังก์ชันหลังจากเวลาที่ระบุ

> Function.InvokeAfter เรียกใช้ฟังก์ชันหลังจากรอเวลาที่กำหนด นำไปใช้ในการควบคุมความเร็วเรียกข้อมูล API

## คำอธิบาย

Function.InvokeAfter เรียกใช้ฟังก์ชันหลังจากรอเวลาที่กำหนด นำไปใช้ในการควบคุมความเร็วเรียกข้อมูล API หรือเพิ่มความล่าช้าระหว่างการประมวลผล

## Syntax

```excel
Function.InvokeAfter(function as function, delay as duration) as any
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| function | Yes | function |  | ฟังก์ชันที่ไม่มีพารามิเตอร์ (parameterless function) ที่ต้องเรียกใช้ เขียนเป็น lambda expression เช่น () => 42 |
| delay | Yes | duration |  | เวลาที่ต้องรอก่อนเรียกใช้ฟังก์ชัน ใช้รูปแบบ #duration(0, 0, 0, seconds) เช่น #duration(0, 0, 0, 2) คือรอ 2 วินาที |

## ตัวอย่าง

### 1. เรียกใช้ฟังก์ชันแบบเรียบง่ายหลังรอ 2 วินาที

```excel
Function.InvokeAfter(() => 42, #duration(0, 0, 0, 2))
```

**ผลลัพธ์:** `42 (หลังรอ 2 วินาที)`

ฟังก์ชัน lambda () => 42 จะทำงานหลังรอ 2 วินาที และคืนค่า 42

### 2. รวมข้อความหลังรอ 1 วินาที

```excel
Function.InvokeAfter(() => Text.Combine({"Hello", "World"}, " "), #duration(0, 0, 0, 1))
```

**ผลลัพธ์:** `"Hello World" (หลังรอ 1 วินาที)`

ฟังก์ชัน lambda จะรวมข้อความ "Hello" และ "World" เป็น "Hello World" หลังรอ 1 วินาที

### 3. การเรียกข้อมูล API ที่มีความล่าช้า

```excel
let
    FetchData = () => Json.Document(Web.Contents("https://api.example.com/data")),
    WithDelay = Function.InvokeAfter(FetchData, #duration(0, 0, 0, 3))
in
    WithDelay
```

**ผลลัพธ์:** `ข้อมูล JSON จากเซิร์ฟเวอร์ (หลังรอ 3 วินาที)`

สร้างฟังก์ชัน FetchData ที่ดึงข้อมูล API จากนั้นใช้ Function.InvokeAfter เพื่อรอ 3 วินาที ก่อนเรียกใช้ ช่วยป้องกัน API ที่มีข้อจำกัดอัตราการเรียก

### 4. ควบคุมความล่าช้าระหว่างการเรียกข้อมูลหลาย ๆ ครั้ง

```excel
let
    URLs = {"url1", "url2", "url3"},
    FetchWithDelay = (url) => Function.InvokeAfter(
        () => Json.Document(Web.Contents(url)), 
        #duration(0, 0, 0, 2)
    ),
    Results = List.Transform(URLs, FetchWithDelay)
in
    Results
```

**ผลลัพธ์:** `รายชื่อข้อมูล JSON จากทั้ง 3 URL (แต่ละขั้นรอ 2 วินาที)`

สร้างฟังก์ชัน FetchWithDelay ที่เรียกข้อมูลแต่ละ URL พร้อมความล่าช้า 2 วินาที เหมาะสำหรับเซิร์ฟเวอร์ที่มีข้อจำกัดจำนวนการร้องขอต่อวินาที

## หมายเหตุเพิ่มเติม

- ผมแนะนำให้ใช้ Function.InvokeAfter เมื่อเรียก API หลาย ๆ ครั้ง โดยวางความล่าช้าระหว่าง 0.5-3 วินาที เพื่อป้องกันการบล็อก 429 Too Many Requests

- ส่วนตัวผม ชอบเก็บระยะเวลารอไว้ในตัวแปร เช่น let Delay = #duration(0, 0, 0, 1) in ... เพื่อให้ปรับแต่งง่าย

- ระวังอย่าใช้ Function.InvokeAfter สำหรับเวลารอนานมาก เพราะมันจะทำให้การโหลดข้อมูลช้ามาก ให้พิจารณาเรียก API ไม่จำเป็นต้องมากเท่านั้น

## คำถามที่พบบ่อย

**Q: ผมต้องใช้ Function.InvokeAfter เมื่อไหร่?**

ผมแนะนำให้ใช้ Function.InvokeAfter เมื่อเรียก API ที่มีข้อจำกัดความถี่ (rate limiting) หรือเมื่อต้องการเพิ่มความล่าช้าระหว่างการส่งข้อมูลเพื่อหลีกเลี่ยงการบล็อก โดยมักใช้ร่วมกับ List.Transform หรือ Table.AddColumn เพื่อประมวลผลข้อมูลหลาย ๆ ชุด

**Q: ฟังก์ชันที่ส่งเข้า Function.InvokeAfter ต้องเป็นแบบไหน?**

ฟังก์ชันต้องไม่มีพารามิเตอร์ (parameterless function) เขียนเป็น lambda expression เช่น () => 42 หรือ () => Text.Combine(...) ถ้าฟังก์ชันต้องใช้พารามิเตอร์ ผมต้องสร้างฟังก์ชัน wrapper ไว้

**Q: ผมจำเป็นต้องใช้ #duration ไหม?**

ใช่ ต้องใช้ #duration เพื่อระบุเวลารอ รูปแบบคือ #duration(days, hours, minutes, seconds) ตัวอย่างเช่น #duration(0, 0, 0, 2) คือรอ 2 วินาที, #duration(0, 0, 1, 0) คือรอ 1 นาที

**Q: Function.InvokeAfter คืนค่าอะไร?**

ผมคืนค่าผลลัพธ์ของฟังก์ชนที่เรียก ประเภทของค่าขึ้นอยู่กับสิ่งที่ฟังก์ชันนั้นทำ (any type) เช่น ถ้าฟังก์ชันคืนค่าตัวเลข ผมจะคืนค่าตัวเลข ถ้าคืนค่า JSON ผมจะคืนค่า JSON

## แหล่งข้อมูลเพิ่มเติม

- [Microsoft Learn: Function.InvokeAfter](https://learn.microsoft.com/en-us/powerquery-m/function-invokeafter) _(official)_
- [Power Query M Reference - Function.Invoke](https://learn.microsoft.com/en-us/powerquery-m/function-invoke) _(official)_

---

_Source: [https://www.thepexcel.com/functions/power-query/function-values/function-invokeafter/](https://www.thepexcel.com/functions/power-query/function-values/function-invokeafter/)_
