Добавление или удаление данных в файле с помощью облачных функций - PullRequest
0 голосов
/ 26 мая 2018

Моя идея состоит в том, чтобы иметь возможность редактировать файлы в хранилище.Эта редакция состоит из добавления или удаления данных файла в соответствии с триггером firebase.

Я создал триггер в firebase после получения файла с bucket.file function ("file.txt"). CreateReadStream () и отредактировал данные в базе при изменении.после этого я обновил файл с помощью функции b ucket.file ("file.txt"). createWriteStream ().Это решение хорошо, когда имеется 1 триггер, но если имеется более 2 триггеров, данные не сохраняют правильность, почему файл перезаписывается данными, которые были до этого.

Пример

это содержимое файла file.txt

Этот текст является примером

и выполнил 2 триггера, 2 активатора получают файл одновременно, и первый триггер добавляетданные и перезаписывают файл с этим сообщением

этот текст является примером

, и этот файл был отредактирован с первым триггером

и вторым активаторомстирает данные и перезаписывает файл с этим сообщением

этот текст

Когда триггеры завершены, файл имеет "этот текст", но этот файл должен иметь

этот текст

и этот файл был отредактирован с помощью первого триггера

Кто-нибудь, помогите мне.

exports.createData = functions.database.ref('data/{id}/summary/status').onCreate((data, context) => {
    let status = data._data;
    return Promise.all([ admin.database().ref('data/' + context.params.id + '/summary/entityUrl').once('value', (snapshot) => {
        let entityUrl = snapshot.val(); 
        if (isDataValid(status))
            return  addDataFile(entityUrl) ;
        return; 
    }) ]);  
})
function addDataFile(entityUrl){
    return Promise.all([ returnFile("txt",() => {
        dataFile.splice(dataFile.length - 1, 0, `new data ${entityUrl}`)
        updateFileStorage("txt", dataFile.join('\n'));  
    }) ]);

}
function returnFile(extension, callback) {
    let respData = "";
    if (dataFile == null ){
        return bucket.file(FileUrl + extension).createReadStream()
            .on('data', (chunk) => {
                respData += chunk;
            })
            .on('end', () => {
                dataFile = respData.split('\n');
                callback();
            })
            .on('error', (error) => {
                console.log("Error en lectura")
                return returnFile(extension, callback);
            })
    }
    else callback();
    return;
}
function updateFileStorage(extension,data, trys ){
    trys = typeof trys !== 'undefined' ? trys : 0;
    if(trys>6)
        return;
    var s = new Readable();
    s._read = function noop() { };
    s.push(data);
    s.push(null);
    return s.pipe(bucket.file(FileUrl + extension).createWriteStream())
        .on('finish', function () {
            //console.log("File updated");
            return;
        })
        .on('error', function (err) {
            console.log("Error de Escritura");
            return setTimeout(() => {
                return updateFileStorage(extension, data, trys + 1)
            }, 250);
        })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...