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

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

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

  • Giải quyết các hàm thực hiện xử lý không đồng bộ (còn được gọi là "hàm nền") bằng cách trả về lời hứa JavaScript .
  • Chấm dứt các hàm HTTP bằng res.redirect() , res.send() hoặc res.end() .
  • Chấm dứt chức năng đồng bộ bằng lệnh return; tuyên bố.

Đơn giản hóa 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 cho mã không đồng bộ. Một 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ề. Nó cũng cho phép bạn truyền bá các lỗi tương tự như thử/bắt 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 .

Lời hứa hoạt động như thế nào với các hàm

Khi bạn trả lại 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. Để chỉ ra rằng một chức năng đã hoàn thành công việc của mình một cách thành công, lời hứa phải được giải quyết. Để chỉ ra 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à bạn muốn.

Đoạn mã sau lấy ref Cơ sở dữ liệu thời gian thực Firebase 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 tiếp tục chạy cho đến khi công việc ghi chuỗi vào cơ sở dữ liệu không đồng bộ hoàn tất:

// 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ụ trong ngữ cảnh

Hầu hết các mẫu mã Chức năng đám mây của chúng tôi đều bao gồm các ví dụ về việc chấm dứt chức năng thích hợp. Dưới đây là một số minh chứng cho những trường hợp điển hình: