Đồ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 không bị tắt trước khi hàm đó đạt đến thành công điều kiện hoặc trạng thái kết thúc.

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 hàm đồng bộ bằng câu lệnh return;.

Đơn giản hoá mã không đồng bộ với hứa hẹn JavaScript

Lời hứa là giải pháp thay thế hiện đại cho lệnh gọi lại cho mã không đồng bộ. Lời hứa đại diện cho một hoạt động và giá trị tương lai mà nó có thể trả về. API này cũng cho phép bạn truyền các 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 Firebase SDK trên Blog Firebase và các lời hứa nói chung trên MDN.

Cách hứa hẹn hoạt động với các hàm

Khi bạn trả về lời hứa trong 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 thành công công việc, lời hứa phải được phân giải. Để chỉ báo lỗi, lời hứa nên bị từ chối. Điều này có nghĩa là bạn chỉ cần xử lý các lỗi mình muốn.

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

// 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ó các ví dụ về cách kết thúc hàm đúng cách. Sau đây là một số trường hợp điển hình: