ошибка firestore: «Вложенные массивы не поддерживаются». Firestore / p5.js проблема - PullRequest
1 голос
/ 04 ноября 2019

Может кто-нибудь помочь мне лучше понять эту ошибку? Я пытаюсь использовать p5.js и firebase / firestore, чтобы создать сайт, на котором можно нарисовать что-то на холсте, а затем сохранить рисунок в firestore, но когда я нажимаю на save, я получаю эту ошибку:

error.ts: 166 Uncaught FirebaseError: функция DocumentReference.set () вызвана с недопустимыми данными. Вложенные массивы не поддерживаются

мой код до сих пор:

var drawing = [];
var currentPath = [];
var isDrawing = false;

function setup() {
    canvas = createCanvas(400,400);
    canvas.mousePressed(startPath);
    canvas.parent('canvas');
    canvas.mouseReleased(endPath);
    var saveButton = select('#saveButton');
    saveButton.mousePressed(saveDrawing);
}

function startPath() {
    isDrawing = true;
    currentPath = [];
    drawing.push(currentPath);
}

function endPath() {
    isDrawing = false;
}

function draw() {
    background(0);

    if (isDrawing){
        var point = {
        x: mouseX,
        y: mouseY
        }
    currentPath.push(point);
    }

    stroke(255);
    strokeWeight(7);
    noFill();
    for (var i = 0; i < drawing.length; i++) {
        var path = drawing[i];
        beginShape();
        for (var k = 0; k < path.length; k++) {
            vertex(path[k].x, path[k].y)
        }
        endShape();
    }
}

function saveDrawing(){
    db.collection('joonistused').add({
        drawing: drawing
    });
    var result = ref.push(data, dataSent);
    console.log(result.key)

    function dataSent(status) {
        console.log(status);
    }
}

edit: Как я могу сохранить координаты чертежа в массиве в firestore? Как сохранить мой рисунок в пожарном магазине?

1 Ответ

0 голосов
/ 04 ноября 2019

Фактически, drawing - это массив, в котором прямые элементы тоже являются массивами. Похоже, что Firebase не позволяет иметь массивы массивов из-за некоторых технических ограничений.

Ответы на этот аналогичный вопрос о StackOverflow утверждают, что вы все еще можете иметь массив массивов косвенно, так какзаявлено Трой Майкл :

Вы можете адаптировать функцию сериализации, которая преобразует массивы с типами объектов в карту. Ключи могут быть числовыми для поддержания порядка.

т.е. {1: Object, 2: Object2 ...}

При десериализации вы можете получить Object.values ​​(data);положить его обратно в массив, который будет использоваться на стороне клиента.

Вы можете сделать это или просто вложить ваши подмассивы в объекты, где drawing будет что-то похожее на [ { items: [ ... items of array ...] }, ... ]. Обратите внимание, что drawing - это массив объектов, где у каждого объекта есть поле с именем items, которое представляет собой массив элементов. Согласно приведенному вопросу, кажется, достаточно обойти ограничение.

...