一尘不染

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

node.js

我正在使用Firebase开发Server。

我已经在Youtube上复制了Google
Developer的视频。

它工作正常,但在日志中出现错误:

返回的函数未定义,预期的承诺或价值

它说函数返回了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的初学者。


阅读 208

收藏
2020-07-07

共1个答案

一尘不染

正如弗兰克在对您的帖子的评论中所指出的那样,产生警告的return语句就是这样的:

if (post.sanitized) return;

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

当函数使用没有值的return语句退出时,早期版本的Cloud
Functions不会抱怨。这就解释了为什么您会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);
    });
2020-07-07