【问题标题】:Question regarding returning a null value in a then callback of a promise in firebase cloud functions关于在 firebase 云函数中的 promise 的 then 回调中返回 null 值的问题
【发布时间】:2021-04-03 18:16:40
【问题描述】:

所以在我的云函数中,我有这个 sn-p 代码:

return users_pending_update.once('value').then((snapshot) => {
    if (snapshot.exists()) {
        return manage(ref_date, zonesYetToBeUpdated, snapshot);
    } else {
        return users_tzs_ref.once('value').then((snapshot) => {
            if (snapshot.exists()) {
                return manage(ref_date, zonesYetToBeUpdated, snapshot);
            } else {
                return null;
            }
        }).catch((error) => {
            console.error("Getting the list of values from the \"users_tzs\" node failed with error: " + error);
        });
    }
}).catch((error) => {
    console.error("Getting the list of values from the \"users_pending_update\" node failed with error: " + error);
});

我的问题是关于您可以在代码中看到的 return null 语句。我在那里拥有它的唯一原因是因为我收到一个警告,即并非所有代码路径都返回一个值。我不需要也不关心那边的那条路。如果我使用 return Promise.reject("text") 之类的东西,警告也会消失。如果我将其保留为 return null 会有问题吗?如果是,我应该将其更改为什么?

【问题讨论】:

  • 如果不了解这段代码如何适应整个函数的上下文,或者不了解达到 null 时函数的用途,很难说。请编辑问题以使其更完整。

标签: javascript firebase firebase-realtime-database promise google-cloud-functions


【解决方案1】:

如果我将其保留为 return null 会有问题吗?如果是,我应该将其更改为什么?

这实际上取决于调用者的逻辑或您希望调用者的逻辑是什么。当你在那里执行return null; 时,你是说在这个特定的代码路径中,你希望从这个函数返回的promise 的解析值是null。如果:

  • 调用者根本没有使用解析值,这是对调用者真正重要的函数类型是操作成功或错误并且没有特定有用的解析值。
  • 调用者正在检查null 的解析值或其他一些虚假值并采取相应措施。例如,如果您查询某些内容但未找到结果,某些数据库接口将返回类似 null 的内容。这不是错误情况,只是通知您未找到任何搜索结果。

至于更改为return Promise.reject("text") 之类的内容,会产生完全不同的结果。这使得这个特定的代码路径拒绝它返回的承诺,这将为调用者产生明显不同的行为。您通常只会在这是一个错误条件并且您希望将此类错误传达给调用者并且您希望他们在 .catch() try/catch(if usingawait 中处理此错误时才这样做) .

此外,您通常不会使用字符串拒绝。通常你会用Error 对象拒绝。

【讨论】:

  • 抱歉,隔了很久才回复。所以是的,在这种情况下,调用者不关心任何返回值。我必须首先返回某些东西的唯一原因是,正如我所说,因为 if 语句在该语句中,如果为真,我将从我的 manage 函数返回一个承诺,以保持云函数处于活动状态。所以我不在乎 if 语句是否为假,因此我只需要在 else 语句中返回一些东西(在我的情况下为 null)。我认为这不会成为问题,但我不妨问一下,因为我对 typescript 还是有点陌生​​。感谢您的回答。
猜你喜欢
  • 2020-05-16
  • 2019-08-20
  • 2020-03-31
  • 1970-01-01
  • 2018-12-05
  • 2021-05-31
  • 2019-08-06
  • 2017-09-14
  • 1970-01-01
相关资源
最近更新 更多