Đối số của Promise là một hàm. Nó được gọi là hàm thực thi (executor)

function hàmThựcThi(biến1, biến2){
    // Những hàm bất đồng bộ thì để vào đây
}
const promise = new Promise(hàmThựcThi);

Đối số của hàmThựcThi, đến lượt nó, cũng là 2 hàm khác nhau, được gọi lần lượt là hàm giải quyết và hàm từ chối:

function hàmGiảiQuyết(giáTrịTrongHàmGiảiQuyết){}
function hàmTừChối(giáTrịTrongHàmTừChối){}
function hàmThựcThi(hàmGiảiQuyết, hàmTừChối){}

Thông thường, bạn phải định nghĩa hàmGiảiQuyếthàmTừChối. Nhưng nếu bạn

Nếu chạy thông thường thì bạn chỉ cần return lấy kết quả trong hàmThựcThi là được. Nhưng nhớ rằng ở đây ta đang truyền nó vào Promise. Mà đây là một lớp được JS viết ra sẵn, không phải là do bạn viết ra. Khi JS viết ra, nó không viết dòng nào để nhận kết quả của hàmThựcThi. Tức là việc bạn có return trong đó không có tác dụng gì (ngoài trừ việc làm nó kết thúc sớm).

Thứ JS thiết kế ở Promise, là khi chạy hàmThựcThi thì hàmGiảiQuyết được gọi trước hay là hàmTừChối được gọi trước. Nếu hàmGiảiQuyết được gọi trước, thì giáTrịTrongHàmGiảiQuyết sẽ được gán vào thuộc tính result của vật thể promise, đồng thời chuyển giá trị của thuộc tính state của nó từ pending sang fulfilled. Ngược lại, nếu hàmTừChối được gọi trước, thì giáTrịTrongHàmTừChối sẽ được gán vào thuộc tính result của vật thể promise, đồng thời chuyển giá trị của thuộc tính state của nó từ pending sang rejected.

resolve, reject là hai hàm được JS cung cấp sẵn. Chúng được dùng làm đối số cho hàm thực thi

Để lấy được giá trị state và result của promise, cần dùng các phương thức then và catch của nó

Tham khảo: