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

标签 javascript node.js firebase firebase-realtime-database google-cloud-functions

我正在使用 Firebase 开发服务器。

我在 Youtube 上复制了 Google 开发者的视频.

效果很好,但是在日志中有错误:

Function returned undefined, expected Promise or 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 的初学者。

最佳答案

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

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

关于javascript - Google Firebase 错误(函数返回未定义、预期的 Promise 或值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47128440/

相关文章:

node.js - testcafe 正在打开浏览器并默认为/browser/connect/.... 并且无法执行测试

firebase - 在Flutter中以表格形式查看FIrestore数据

firebase - Firestore snapshots.map(_transform) 在 StreamBuilder 中没有数据

javascript - 替换状态中的数组元素(整数)

JavaScript:针对不同情况压缩对象分配

javascript - 当我第二次点击链接时如何显示面板

javascript - jQuery .closest 未能找到父级的输入值

node.js - now.js : "Object has no method" error message when trying to start server. js

node.js - 如何从 Sequelize 查询中删除双引号?

android - 如何通过 Wireshark 调试 Firebase 问题?