Open Jacobvu84 opened 1 year ago
Promise là gì ?
Promise là một đối tượng được sử dụng để đại diện cho một giá trị có thể trả về trong tương lai hoặc một hành động có thể hoàn thành trong tương lai.
Promise có ba trạng thái chính là:
Xét ví dụ
async function getData() {
const response = await fetch('https://example.com/data');
const data = await response.json();
return data;
}
getData()
.then(data => {
// xử lý kết quả trả về
})
.catch(error => {
// xử lý lỗi
});
thì promise ở đây là fetch
và response.json()
Promise được xây dựng bằng cách sử dụng cấu trúc có hai tham số đầu vào: một hàm executor và một hàm callback. Hàm executor sẽ được gọi ngay khi promise được tạo và nhận hai tham số là hai hàm "resolve" và "reject" để giải quyết hoặc từ chối promise. Hàm callback sẽ được gọi khi promise được giải quyết hoặc từ chối để xử lý kết quả trả về hoặc lỗi.
const promise = new Promise((resolve, reject) => {
// tác vụ bất đồng bộ
const result = doSomething();
if (result) {
resolve(result); // giải quyết promise nếu thành công
} else {
reject('Error'); // từ chối promise nếu có lỗi xảy ra
}
});
promise.then((result) => {
// xử lý kết quả trả về khi promise được giải quyết
}).catch((error) => {
// xử lý lỗi khi promise bị từ chối hoặc có lỗi xảy ra
});
Trong ví dụ trên, chúng ta tạo một Promise và thực hiện một tác vụ bất đồng bộ bên trong hàm executor. Nếu tác vụ hoàn thành thành công, chúng ta sử dụng hàm "resolve" để giải quyết promise và trả về kết quả. Nếu có lỗi xảy ra, chúng ta sử dụng hàm "reject" để từ chối promise và trả về thông tin lỗi.
Sau đó, chúng ta sử dụng phương thức "then" để đăng ký một hàm callback được gọi khi promise được giải quyết thành công. Phương thức "then" nhận một tham số là hàm callback được gọi với kết quả trả về của promise khi nó được giải quyết thành công. Chúng ta cũng có thể sử dụng phương thức "catch" để đăng ký một hàm callback được gọi khi promise bị từ chối hoặc có lỗi xảy ra.
Khi promise được giải quyết thành công hoặc bị từ chối, nó sẽ không thay đổi trạng thái của nó. Nếu bạn muốn thực hiện nhiều tác vụ bất đồng bộ liên tiếp, bạn có thể sử dụng phương thức "then" để nối chúng lại với nhau.
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 1');
}, 2000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 2');
}, 1000);
});
promise1
.then((result) => {
console.log(result); // "Promise 1"
return promise2;
})
.then((result) => {
console.log(result); // "Promise 2"
})
.catch((error) => {
console.log(error);
});
rong ví dụ trên, chúng ta tạo hai Promise và sử dụng phương thức "setTimeout" để giả lập tác vụ bất đồng bộ. Sau đó, chúng ta sử dụng phương thức "then" để nối các Promise lại với nhau và xử lý kết quả trả về khi chúng được giải quyết. Nếu bất kỳ Promise nào bị từ chối hoặc có lỗi xảy ra, chúng ta sử dụng phương thức "catch" để xử lý lỗi đó.
Interface
Implementation
Usage
1. Query
2. Variables
2. Use graphql client object
1/ Cài
supertest
Theo hướng dẫn ở đây. It should be installed when generating the project with
nest
. https://github.com/Jacobvu84/nest-graphql-api-test/issues/12/ Ý nghĩa của một số từ khoá
export
: Có vai trò giống nhưpublic
access modifier bên Java. Nó cho phép các module khác có thể truy cập vào sử dụng các tài nguyên của một module khác.await
: Dùng để xử lý các tác vụ bất đồng bộ. Khi một tác vụ (Task1
)bị phụ thuộc vào trạng thái công việc của một tác vụ khác[Task2, Task3]
thìawait
được sử dụng để đợi một promise trả về kết quả trước khi tiếp tục thực hiện các lệnh tiếp theo trong tác vụ ban đầu củaTask1
. Nếu ai đã dùng selenium WebDriver thìawait
sẽ giống với vai trò các lệnh trong nhóm wait trước khi thực hiện thực hiện một lệnh thuộc nhóm actionconst
: được sử dụng để khai báo một biến hằng số, nghĩa là giá trị của biến này không thể thay đổi sau khi đã được gán giá trị ban đầu. Nó giống với từ khoáfinal
bên javaasync
: Từ khóa async được sử dụng để chỉ ra rằng hàm được định nghĩa là một hàm bất đồng bộ (asynchronous function) trong JavaScript. Khi một hàm được đánh dấu bằng từ khóa async, nó sẽ trả về một đối tượng Promise và có thể chứa từ khóaawait