Tôi đang xây dựng một kỹ năng Alexa, yêu cầu tôi phải nghe Cơ sở dữ liệu thời gian thực Firebase. Trong một phần cụ thể của kỹ năng, tôi cần phải viết một đối tượng JSON vào Firebase, bao gồm hai trường, "ý định", với một giá trị không đáng kể và "đã hoàn thành", với giá trị là false
. Sau đó, tôi đợi một thiết bị khác nghe cơ sở dữ liệu này để đăng ký thay đổi này, tại thời điểm đó nó tạo ra một trường khác, có tên là "kết quả", với một số giá trị số và thay đổi giá trị "đã hoàn thành" thành true.Lắng nghe cơ sở dữ liệu Firebase trong AWS Lambda lần
Sau đó, chức năng gốc (test1
) phải nhận ra khi giá trị "thực hiện" là đúng và sau đó truy xuất giá trị của "kết quả".
Điều tôi đang gặp phải là có chức năng thực hiện tất cả các thao tác đọc/ghi này trước khi chức năng chính (không đồng bộ) của tôi kết thúc. Như tiêu đề cho thấy, AWS Lambda lần vì lý do nào đó, và tôi không thể đọc giá trị của "kết quả".
Đây là chức năng Tôi đang sử dụng:
function test1(intentName, targetRef, context) {
console.log("writing");
targetRef.set({
intent: intentName,
done: false
}).then(function() {
return targetRef.orderByChild("done").equalTo(true).on("value");
}).then(function(snapshot) {
var res = snapshot.val().result;
console.log("Res: " + res);
context.succeed(//context.succeed should be called after "result" has a value.
generateResponse(
buildSpeechletReponse("The result is" + processNumbersForSpeech(res), true),
{}
)
);
});
}
Đây là sản phẩm của giao diện điều khiển (trong AWS Lambda):
20:05:31
START RequestId: a25d2354-d9cb-11e6-b80a-f35142a5f45f Version: $LATEST
20:05:31
2017-01-13T20:05:31.464Z a25d2354-d9cb-11e6-b80a-f35142a5f45f writing
20:05:35
END RequestId: a25d2354-d9cb-11e6-b80a-f35142a5f45f
20:05:35
REPORT RequestId: a25d2354-d9cb-11e6-b80a-f35142a5f45f Duration: 4001.15 ms Billed Duration: 4000 ms Memory Size: 128 MB Max Memory Used: 39 MB
20:05:35
2017-01-13T20:05:35.335Z a25d2354-d9cb-11e6-b80a-f35142a5f45f Task timed out after 4.00 seconds
Sau đây là cấu trúc của dữ liệu căn cứ hỏa lực:
"thực hiện" ban đầu là sai. Khi thiết bị kia thêm "kết quả", nó cũng cập nhật giá trị "thực hiện" thành true. "148434459 ..." là targetRef.
Trợ giúp của bạn thực sự được đánh giá cao. Tôi sẽ cung cấp thêm thông tin nếu cần.
Hy vọng câu trả lời của tôi ở đây sẽ giúp https://stackoverflow.com/a/45266181/2073325 – gchao