我还是一个新手,所以请原谅我!我已经跟随youtube课程构建了一个note应用程序,并获得了一个工作基础,但我现在在删除firebase中的笔记时会随机出现这个错误,希望有人能够发现这里的烹饪!
“未处理的拒绝(FirebaseError):没有要更新的文档:projects/speakle-dc 94 b/databases/(默认)/documents/notes/GdWPrQNxR 3 Z9 TFMWmqOZ”
它像这样引用节点模块:screenshot of the error in chrome
我与firebase交互的代码看起来像这样:
componentDidMount = () => {
firebase
.firestore()
.collection('notes')
.onSnapshot(serverUpdate => {
const notes = serverUpdate.docs.map(_doc => {
const data = _doc.data();
data['id'] = _doc.id;
return data;
});
console.log(notes);
this.setState({ notes: notes });
});
}
selectNote = (note, index) => this.setState({ selectedNoteIndex: index, selectedNote: note });
noteUpdate = (id, noteObj) => {
firebase
.firestore()
.collection('notes')
.doc(id)
.update({
title: noteObj.title,
body: noteObj.body,
timestamp: firebase.firestore.FieldValue.serverTimestamp()
});
}
newNote = async (title) => {
const note = {
title: title,
body: ''
};
const newFromDB = await firebase
.firestore()
.collection('notes')
.add({
title: note.title,
body: note.body,
timestamp: firebase.firestore.FieldValue.serverTimestamp()
});
const newID = newFromDB.id;
await this.setState({ notes: [...this.state.notes, note] });
const newNoteIndex = this.state.notes.indexOf(this.state.notes.filter(_note => _note.id === newID)[0]);
this.setState({ selectedNote: this.state.notes[newNoteIndex], selectedNoteIndex: newNoteIndex });
}
deleteNote = async (note) => {
const noteIndex = this.state.notes.indexOf(note);
await this.setState({ notes: this.state.notes.filter(_note => _note !== note) })
if(this.state.selectedNoteIndex === noteIndex) {
this.setState({ selectedNoteIndex: null, selectedNote: null});
} else {
this.state.notes.lenght > 1 ?
this.selectNote(this.state.notes[this.state.selectedNoteIndex - 1], this.state.selectedNoteIndex - 1) :
this.setState({ selectedNoteIndex: null, selectedNote: null });
}
firebase
.firestore()
.collection('notes')
.doc(note.id)
.delete()
.then(function() {
console.log("Document successfully deleted!");
}).catch(function(error) {
console.error("Error removing document: ", error);
});
}
}
字符串
4条答案
按热度按时间zdwk9cvp1#
这只是意味着没有该名称的文档要上传。您可以使用
set()
或add()
来添加该文档,因为它不存在。字符串
将上面的代码替换为
型
或
型
50few1ms2#
我只在Cloud Functions中使用过类似的东西,在编写用于执行某些操作的端点时,我遇到了下面引用的错误。
我试图读取一个集合中的文档,如果它存在,我试图将一个新文档写入另一个集合,所以这是一种嵌套代码。
我的一段代码。
字符串
UnhandledPromiseRejection警告:参考错误:未定义Firestore UnhandledPromiseRejectionWarning:未处理的promise rejection。此错误可能是由于在没有catch块的情况下抛出了一个blog函数而引起的
现在我也是Firebase的新手,但我遇到了这个问题,并以某种方式解决了它。
所以如果我在
get()
文档中放入catch块,我不会得到上面的错误。奇怪吧!通过注解删除catch块。得到此错误。
现在,这是一个混乱的错误,它说捕捉不存在,但我们故意这样做。
所以我开始搜索,在这里遇到了这个关于堆栈溢出的问题,发现它仍然没有答案。我自己搜索并阅读了文档。
我想告诉你的是,这并不是因为什么火之安全规则,或者其他什么,因为我在寻找答案的时候,也遇到了一些关于这些概念的猜测。
我们在这里做的共同点是,我们试图在FireStore实现ServerTimeStamp
我想把你的通知我的进口在我的节点云函数代码。
型
所以你看,我正在使用新的方式来获得使用Firestore的权限,因为我试图建立一个云功能。
下面是Google提供的文档参考:单击here!
上述API参考建议的正确语法是
型
它是罪魁祸首,它没有提供任何时间戳,如果没有catch块未处理的promise错误发生,并且在调试时没有显示错误,它就不工作。
我是这样做的,解决方案部分:
即使在我的Node程序中导入了这些内容之后,我还是导入了以下内容:
型
现在我所做的就是在timestamp字段中使用语句,
型
正如前面提到的,甚至使用了一个catch块,以防在生产过程中发生任何其他问题。这就是使用db常量来完成所有数据库transmitting的事情,并且对于
serverTimeStamp
,我必须引入新的导入。它工作了,我猜
require('@google-cloud/firestore')
语句导入为{FireStore}带来了FieldValue所需的所有东西,用作引用。我希望它可以帮助任何新的人寻找它,并节省了很多时间,我浪费了寻找一个解决方案。
我已经通过在firebase模拟器上运行cloud函数验证了它。
cclgggtu3#
你可以简单地这样做
你
1.得到它
1.如果它存在:你更新它
1.如果它不存在,你设置它。
字符串
nuypyhwy4#
字符串
你可以处理拒绝:
型
你可以尝试更新注解,如果它失败到
No document found
,你可以检查抛出的错误代码。如果抛出,你可以创建它。