async function expression
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2017.
Từ khóa async function có thể được sử dụng để định nghĩa một async function bên trong một biểu thức.
Bạn cũng có thể định nghĩa async function bằng cách sử dụng khai báo async function hoặc cú pháp arrow.
Cú pháp
async function (param0) {
statements
}
async function (param0, param1) {
statements
}
async function (param0, param1, /* …, */ paramN) {
statements
}
async function name(param0) {
statements
}
async function name(param0, param1) {
statements
}
async function name(param0, param1, /* …, */ paramN) {
statements
}
Note:
Một expression statement không thể bắt đầu bằng từ khóa async function để tránh nhầm lẫn với một khai báo async function. Từ khóa async function chỉ bắt đầu một biểu thức khi chúng xuất hiện trong ngữ cảnh không thể chấp nhận câu lệnh.
Tham số
nameOptional-
Tên hàm. Có thể bỏ qua, trong trường hợp đó hàm là ẩn danh. Tên chỉ cục bộ trong thân hàm.
paramNOptional-
Tên của một tham số hình thức cho hàm. Để biết cú pháp của các tham số, xem Tham chiếu Functions.
statementsOptional-
Các câu lệnh tạo nên thân hàm.
Mô tả
Một biểu thức async function rất giống với, và có cú pháp gần như giống với, một khai báo async function. Sự khác biệt chính giữa biểu thức async function và khai báo async function là tên hàm, có thể được bỏ qua trong các biểu thức async function để tạo ra các hàm ẩn danh. Biểu thức async function có thể được sử dụng như một IIFE (Immediately Invoked Function Expression) chạy ngay khi nó được định nghĩa, cho phép bạn mô phỏng top-level await. Xem thêm chương về functions để biết thêm thông tin.
Ví dụ
>Sử dụng biểu thức async function
function resolveAfter2Seconds(x) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
// biểu thức async function được gán cho một biến
const add = async function (x) {
const a = await resolveAfter2Seconds(20);
const b = await resolveAfter2Seconds(30);
return x + a + b;
};
add(10).then((v) => {
console.log(v); // in ra 60 sau 4 giây.
});
// biểu thức async function được sử dụng như một IIFE
(async function (x) {
const p1 = resolveAfter2Seconds(20);
const p2 = resolveAfter2Seconds(30);
return x + (await p1) + (await p2);
})(10).then((v) => {
console.log(v); // in ra 60 sau 2 giây.
});
Async IIFE
Một async IIFE cho phép bạn sử dụng await và for...await trong các ngữ cảnh mà top-level await không khả dụng. Ở đây chúng ta sử dụng một arrow function để định nghĩa IIFE, nhưng các biểu thức async function cũng có thể được sử dụng.
const getFileStream = async (url) => {
// implementation
};
(async () => {
const stream = await getFileStream("https://domain.name/path/file.ext");
for await (const chunk of stream) {
console.log({ chunk });
}
})();
Đặc tả kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-async-function-definitions> |
Tương thích trình duyệt
Xem thêm
- Hướng dẫn Functions
- Functions
async functionAsyncFunctionawait