Перехват исключений при вызове, установленном в Firestore - PullRequest
0 голосов
/ 03 мая 2020

Я некоторое время не касался JS или Firebase, так что простите за проблемы со стилем. Я столкнулся с проблемой, вызывающей set на DocumentReference. Вы не можете иметь значение undefined. Это нормально, но я ожидал, что мой блок catch поймает исключение, но вместо этого вся функция потерпела крах (это внутри функции облака). Я попытался упростить код:

app.get('/test', (req, res) => {    
    return db.collection('users').doc('someid').set({
        first: undefined
    })
    .then(()=> {
        res.send('it worked?');
    })
    .catch((error: any) => {
        console.error(error);
        res.status(500).send('it didn\'t work');
    })
})

Пару заметок, я использую ExpressJS и проверяю это в эмуляторе Firebase Functions, записывая в настоящий Firestore.

Итак, мой вопрос: почему ошибка не обнаруживается? Вместо этого я получаю ответ, содержащий подробности исключения. Это решение для проверки значений перед вызовом набора? И если да, то, если это не написано в документации, указанной выше, как вы должны это знать?

1 Ответ

0 голосов
/ 04 мая 2020

Проблема в том, что функция set() выдает исключение перед возвратом обещания, потому что параметр недопустим, поэтому вы должны проверить, что у вашего объекта нет неопределенных полей.

Из экспериментов я обнаружил, что он принимает null s, так что вот способ обойти эту проблему:

let firstValue;

app.get('/test', (req, res) => {    
    return db.collection('users').doc('someid').set({
        first: firstValue || null
    })
    .then(()=> {
        res.send('it worked?');
    })
    .catch((error: any) => {
        console.error(error);
        res.status(500).send('it didn\'t work');
    })
})

Я не нашел никаких указаний в документации, что Функция set() не принимает данные с полями undefined, но я не знаю, зачем вам их туда доставать, так как я не думаю, что было бы полезно хранить их в базе данных. Также рекомендуется всегда инициализировать переменные, чтобы избежать необходимости решать такие проблемы, используйте пустые значения, такие как "" или {}, если вы еще не вычислили значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...