我在我的reactjs+typescript项目中使用firebase,我想用firebase写一个文档,我使用setDoc
来完成这项工作。
import { doc, setDoc } from 'firebase/firestore';
setDoc(doc(database, `path`), objData)
当你检查函数的返回时,它说Promise<...>
,但是,如果我不知道当它fullfil/reject时,我应该如何使用then()
catch()
promise处理程序呢?
4条答案
按热度按时间gkn4icbw1#
我对Firebase不是很熟悉,但环顾四周后,似乎回报就是
setDoc()
是否成功。所以.then()
意味着是,.catch()
意味着否。所以实际上,您想要的就是这样的东西同样,我不能完全确定返回的确切值,因为我找不到太多,但如果有一个给定的结果值,您将把它放在
.then((result) => {console.log(result)})
中。8ehkhllq2#
firebase文档建议使用
await
,所以这里有一个完整的例子,用await处理错误,用finally清 debugging 误。mbyulnm03#
在Typescript中,你不需要精确地指定promise返回类型。下面是一个如何在setDoc中使用promise处理程序的例子:
eivgtgni4#
我发现了一些奇怪的行为。我在Angular中做了一个处理函数,它调用了一个Firebase云函数,该函数写入Firestore。我正在使用模拟器。
这将在模拟器控制台中记录
Finished writing word object to Firestore database: luck
,并在Angular控制台中记录38
。如果我注解掉
return 38
,模拟器日志是相同的,但在Angular控制台中,我看到:无论采用哪种方式,数据都将写入Firestore模拟器。
一个成功的数据库写操作返回
null
到调用它的Angular处理函数,我在几秒钟内没有看到Success!
,所以很明显它正在异步地执行一些操作。如果我注解掉
return 37
和return error
,那么一切都可以正常运行。通常当我编写一个没有return语句的Firebase云函数时,它会在日志中抛出一个错误。我觉得奇怪的是,返回到Angular处理程序的总是
null
,而不是37
。console.log
消息写入模拟器日志,但return 37
语句从未执行。除了null
,您不能返回任何东西给调用函数。我试着把
.finally(() => { return 37 });
放在最后,但我再也没有得到37
回来。