0

У меня возникли проблемы с сохранением данных в базе данных firebase с использованием функции лямбда. Это время. Я попытался установить тайм-аут до 5 минут, что в идеале не должно выполняться, но все же его тайм-аут.AWS Функция лямбда-тайм-аута при добавлении ввода в базу

'use strict'; 

var firebase = require('firebase'); 

exports.handler = (event, context, callback) => { 

    console.log(context); 

    var params = JSON.stringify(event); 

    var config = { 
    apiKey: "SECRETAPIKEY", 
    authDomain: "myapplication.firebaseapp.com", 
    databaseURL: "https://myapplication.firebaseio.com", 
    storageBucket: "myapplication.appspot.com", 
    messagingSenderId: "102938102938123" 
    }; 

    if(firebase.apps.length === 0) { // <---Important!!! In lambda, it will cause double initialization. 
     firebase.initializeApp(config); 
    } 

    var db = firebase.database(); 

    var postData = { 
    username: "test", 
    email: "[email protected]" 
    }; 

    // Get a key for a new Post. 
    var newPostKey = firebase.database().ref().child('posts').push().key; 

    // Write the new post's data simultaneously in the posts list and the user's post list. 
    var updates = {}; 
    updates['/posts/' + newPostKey] = postData; 

    callback(null, {"Hello": firebase.database().ref().update(updates)}); // SUCCESS with message 
}; 

Выше кода сохраняет данные в firebase, но время истекает.

Если я использую context.callbackWaitsForEmptyEventLoop = ложь как объяснено в Link это не тайм-аут, но данные не получает спасение.

Пожалуйста, дайте мне знать, как я могу исправить эту проблему. В cloudwatch нет никакой полезной информации.

Еще одна вещь. Если я использую rest api для firebase, чтобы сохранить данные, они хорошо работают.

+0

Надеюсь, что мой ответ здесь помогает https://stackoverflow.com/a/45266181/2073325 – gchao

ответ

2

Проблема заключается в том, что ваша функция обратного вызова

callback(null, {"Hello": firebase.database().ref().update(updates)}); // SUCCESS with message 

вызывается перед Firebase может сделать обновление.

Вместо текущего обратного вызова, вы должны поместить вашу функцию обратного вызова в Firebase обратного вызова обновление:

firebase.database().ref().update(updates, function (err) { 

    // your processing code here 

    callback(null, {<data to send back>}); 
}) 
+1

Это работает хорошо , В дополнение к этому мне пришлось добавить \t context.callbackWaitsForEmptyEventLoop = false; как первое утверждение – prashant

+0

Это также помогло моей проблеме! Ты да, мужчина! – SmiffyKmc

Смежные вопросы