首页 文章

Google Firebase错误(函数返回未定义,预期的Promise或值)

提问于
浏览
36

我正在使用Firebase开发Server .

我在Youtube上复制了Google Developer's Video .

它运行良好,但在日志中有一个错误:

函数返回未定义,预期的Promise或value

它说函数返回 undefined ,但我让 function 返回一个 promise `set``

我怎么解决这个问题?

function sanitize(s) {
    var sanitizedText = s;
    console.log('sanitize params: ', sanitizedText);
    sanitizedText = sanitizedText.replace(/\bstupid\b/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); 
    })

我是Firebase,Nodejs的初学者 .

1 回答

  • 38

    正如弗兰克在对你的帖子的评论中指出的那样,产生警告的返回声明是这样的:

    if (post.sanitized) return;
    

    通过返回虚拟值(例如,null,false,0)可以使警告静音 . 该值未使用 .

    当函数使用没有值的return语句退出时,早期版本的Cloud Functions没有抱怨 . 这就解释了为什么你在链接的视频和the documentation中看到 return; . Firebaser Frank van Pufeelen对这个问题的评论解释了为什么要做出改变 .

    消除警告的最简单方法是添加返回值,如Frank建议:

    if (post.sanitized) return 0;
    

    另一种选择是将触发器从 onWrite() 更改为 onCreate() . 然后在清理帖子时不会调用该函数,并且不需要产生警告的检查:

    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);
        });
    

相关问题