Đồ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 chức năng để đảm bảo rằng nó giải quyết đúng cách. Bằng cách kết thúc các chức năng một cách chính xác, bạn có thể tránh được các khoản phí quá mức từ các chức năng 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 phiên bản Chức năng đám mây đang chạy chức năng của bạn không bị tắt trước khi chức năng của bạn đạt đến trạng thái hoặc điều kiện kết thúc thành công.

Sử dụng các phương pháp được đề xuất này để quản lý vòng đời của các chức năng 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ề một lời hứa JavaScript .
  • Kết thúc các chức năng HTTP bằng res.redirect() , res.send() hoặc res.end() .
  • Kết thúc chức năng đồng bộ với return; tuyên bố.

Đơn giản hóa mã không đồng bộ với 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ả lại. Nó cũng cho phép bạn lan 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 SDK Firebase trên Blog Firebase và các lời hứa nói chung trên MDN .

Cách lời hứa hoạt động với các chức năng

Khi bạn trả lại một lời hứa JavaScript cho một chức năng, chức năng đó 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 nó thành công, lời hứa sẽ được giải quyết. Để chỉ ra một 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 không đồng bộ vào cơ sở dữ liệu 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 bao gồm các ví dụ về việc chấm dứt chức năng phù hợp. Dưới đây là một vài minh chứng cho các trường hợp điển hình: