Đồng bộ hoá, không đồng bộ và hứa hẹn

Quan trọng là bạn phải quản lý vòng đời của một hàm để đảm bảo rằng nó được phân giải đúng cách. Bằng cách chấm dứt các hàm đúng cách, bạn có thể tránh được các khoản phí quá mức từ các hàm chạy quá lâu hoặc lặp lại vô hạn. Ngoài ra, bạn có thể đảm bảo rằng thực thể Cloud Functions đang chạy hàm của bạn không tắt trước khi hàm của bạn đạt đến trạng thái hoặc điều kiện kết thúc thành công.

Hãy sử dụng các phương pháp được đề xuất sau đây để quản lý vòng đời của các hàm:

  • Phân giải các hàm thực hiện quá trình xử lý không đồng bộ (còn gọi là "hàm trong nền") bằng cách trả về hứa hẹn JavaScript.
  • Chấm dứt các hàm HTTP bằng res.redirect(), res.send() hoặc res.end().
  • Chấm dứt một hàm đồng bộ bằng câu lệnh return;.

Đơn giản hoá mã không đồng bộ bằng lời hứa JavaScript

Lời hứa là một giải pháp thay thế hiện đại cho lệnh gọi lại đối với mã không đồng bộ. Lời hứa đại diện cho một phép toán và giá trị trong tương lai mà phép toán đó có thể trả về. Phương thức này cũng cho phép bạn truyền lỗi tương tự như try/catch trong mã đồng bộ. Bạn có thể đọc về các lời hứa trong SDK Firebase trên Blog Firebase và các lời hứa nói chung trên MDN.

Cách hoạt động của lời hứa với các hàm

Khi bạn trả về một lời hứa JavaScript cho một hàm, hàm đó sẽ tiếp tục chạy cho đến khi lời hứa được giải quyết hoặc bị từ chối. Để cho biết một hàm đã hoàn tất công việc thành công, bạn phải phân giải lời hứa. Để cho biết lỗi, bạn phải từ chối lời hứa. Điều này có nghĩa là bạn chỉ cần xử lý những lỗi mà bạn muốn.

Mã sau đây lấy Firebase Realtime Database ref và đặt giá trị của nó thành "world!". Bằng cách trả về kết quả của set, hàm của bạn được đảm bảo sẽ tiếp tục chạy cho đến khi hoàn tất tác vụ không đồng bộ là ghi chuỗi vào cơ sở dữ liệu:

// Always change the value of "/hello" to "world!"
exports.hello = functions.database.ref('/hello').onWrite(event => {
  // set() returns a promise. We keep the function alive by returning it.
  return event.data.ref.set('world!').then(() => {
    console.log('Write succeeded!');
  });
});

Ví dụ theo bối cảnh

Hầu hết mã mẫu Cloud Functions của chúng tôi đều có ví dụ về cách chấm dứt hàm đúng cách. Sau đây là một số trường hợp điển hình: