Catch up on everthing we announced at this year's Firebase Summit. Learn more

Đồ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ó hoạt động đú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 bị tính phí quá nhiều từ các chức năng chạy quá lâu hoặc lặp 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 tắt trước khi chức năng của bạn đạt được 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:

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

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

Hứa hẹn là một giải pháp thay thế hiện đại cho các 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 phổ biến các lỗi tương tự như thử / bắt trong mã đồng bộ. Bạn có thể đọc về những lời hứa trong căn cứ hỏa lực SDK trên căn cứ hỏa lực Blog , và những lời hứa nói chung trên MDN .

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

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. Để 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 phải đượ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.

Các mã sau đây có một căn cứ hỏa lực Realtime Cơ sở dữ liệu ref và thiết lập giá trị của nó "world!" . Bằng cách trả lại kết quả của set , chức năng của bạn được đảm bảo để tiếp tục chạy cho đến khi công việc không đồng bộ của văn bản cho chuỗi các cơ sở dữ liệu được hoàn thành đầy đủ:

// 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 chức năng đám mây của chúng tôi mẫu mã bao gồm những ví dụ về việc chấm dứt chức năng phù hợp. Dưới đây là một số trường hợp điển hình: