Erreur Google Firebase (fonction renvoyée indéfinie, promesse ou valeur attendue)

Je développe un serveur avec Firebase.

J'avais copié la vidéo du développeur Google sur Youtube .

Cela fonctionne bien, mais sur log il y a une erreur:

Fonction renvoyée indéfini, promesse attendue ou valeur

Il dit la fonction retournée undefined, mais je fais function retourner un promise `set "

Comment puis-je résoudre cela?

function sanitize(s) {
    var sanitizedText = s;
    console.log('sanitize params: ', sanitizedText);
    sanitizedText = sanitizedText.replace(/bstupidb/ig, "wonderful");
    return sanitizedText;
}
exports.sanitizePost = functions.database
    .ref('/posts/{pushId}')
    .onWrite(event => {
        const post = event.data.val();
        if (post.sanitized) return;

        console.log('Sanitizing new post', event.params.pushId);
        console.log(post);
        post.sanitized = true;
        post.title = sanitize(post.title);
        post.body = sanitize(post.body);
        return event.data.ref.set(post); 
    })

Je suis débutant de Firebase, Nodejs.

33
demandé sur Frank van Puffelen 2017-11-06 04:19:48

1 réponses

Comme Frank l'indique dans son commentaire sur votre post, la déclaration de retour qui produit l'avertissement est celle-ci:

if (post.sanitized) return;

L'avertissement peut être réduit au silence en retournant une valeur fictive (par exemple null, false, 0). La valeur n'est pas utilisée.

Les versions antérieures des fonctions Cloud ne se plaignaient pas lorsqu'une fonction s'est arrêtée à l'aide d'une instruction return sans valeur. Qui explique pourquoi vous voyez return; dans la vidéo vous a lié et dans la documentation. Le commentaire sur la question par Firebaser Frank van Pufeelen, explique pourquoi le changement a été fait.

Le moyen le plus simple d'éliminer l'avertissement est d'ajouter une valeur de retour, comme Frank l'a suggéré:

if (post.sanitized) return 0;

Une autre option consiste à changer le déclencheur de onWrite() à onCreate(). Ensuite, la fonction ne sera pas appelée lorsque le post est aseptisé et que la vérification qui produit l'avertissement n'est pas nécessaire:

exports.sanitizePost = functions.database
    .ref('/test/{pushId}')
    .onCreate(event => {  // <= changed from onWrite()
        const post = event.data.val();
        //if (post.sanitized) return; // <= no longer needed

        console.log('Sanitizing new post', event.params.pushId);
        console.log(post);
        //post.sanitized = true; // <= not needed when trigger is onCreate()
        post.title = sanitize(post.title);
        post.body = sanitize(post.body);
        return event.data.ref.set(post);
    });
36
répondu Bob Snyder 2017-12-24 21:47:11