当前位置: 首页 > 面试题库 >

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

汝弘深
2023-03-14
问题内容

我正在使用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的初学者。


问题答案:

正如弗兰克在对您的帖子的评论中所指出的那样,产生警告的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);
    });


 类似资料:
  • 新的云功能和承诺。我尝试在不同的位置添加承诺,但仍然在日志中得到消息。第一,我不确定我应该在哪里添加承诺,第二,我是否应该什么也不回。在调用match(如果条件满足,则创建channel)之后,我不需要执行另一个函数。虽然触发onCreate会有多个用户,所以我想确保每次执行一个用户。 编辑1-我尝试将事务更改为使用await,这样它将只在事务之后更改UserLife节点。得到这两个警告。1)应在

  • 问题内容: 我知道您不能使异步函数同步运行,但是如何向我的promise链添加某种顺序? 一个结果依赖于先前的promise值,当不发生时,我得到一个未定义的错误。这是一个http请求,因此它依赖于外部因素,例如我的连接执行请求的速度等。 我正在按以下方式调用上述方法。但是console.log返回未定义。 终端打印 问题答案: 尝试从第一个然后回调的返回promise

  • 我是Node.js的新手,即使在阅读了其他stackflow用户提供的教程之后,我也在为承诺而挣扎。我已经花了整整一个晚上在这方面,我正在寻求帮助。我得到以下错误“Function return undefined,expected Promise or value”。我的代码在下面。我做错了什么?我还怀疑我必须使用await/async,因为它看起来像是我的代码在没有等待第一个get完成的情况下

  • 问题内容: 关于这两个重要来源:NZakas- 承诺链中的归还承诺 和MDN承诺,我想提出以下问题: 每次我们从承诺履行处理程序返回值时,该值如何传递给从同一处理程序返回的新承诺? 例如, 在这个例子中,是一个承诺。也是来自履行处理程序的承诺。但是。取而代之的是神奇地解决(如何?),然后将该值传递给的实现处理程序。即使是这里的句子也令人困惑。 您能给我解释一下这到底是怎么回事吗?我对这个概念感到困

  • 问题内容: 我正在将React代码转换为打字稿,tsconfig中的目标是es5。 在IE 11中运行时,出现错误“未定义承诺” 我知道我需要填充,但是如何? 我没有使用Babel。 以下是我的Webpack.config 问题答案: 在axios上面写这个对我有用,也许其他选择也可以 我主要面对的是IE中的缓存问题 安装webpack插件也可以 并包括 在webpack插件中 我将使用更多可能的