【发布时间】:2018-04-18 02:44:12
【问题描述】:
我正在使用 Firebase 开发服务器。
我在 Youtube 上复制了 Google 开发者的视频。
效果很好,但是在日志中有错误:
函数返回未定义、预期的 Promise 或值
它说函数返回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 true; -
@FrankvanPuffelen:这篇文章获得了很多浏览量。在 AaronJo 对我下面的回答发表的评论中,他分享了 Firebase 支持表示需要 Promise 或标量返回值的更改是故意的,并且将保持不变。您能否分享有关为什么进行更改的任何见解?有什么好处?当返回一个非 Promise 的值时,这个值有什么意义吗?
-
当你显式返回一个值时,很明显函数完成了。当您明确返回一个承诺时,很明显该函数需要保持活动状态,直到该承诺被解决/拒绝。不返回值时,不清楚函数处于什么状态。
-
@FrankvanPuffelen firebase.google.com/docs/functions/terminate-functions 可以更新吗?它引导人们“返回”;仍然,这让我有点困惑。
-
我看不出那个页面有什么问题,唯一的“返回”指令是“使用
return;语句终止同步函数。”,它用于同步 函数,它是正确的 afaik。这个问题是关于一个异步函数,它有一个缺少的返回值。
标签: javascript node.js firebase firebase-realtime-database google-cloud-functions