javascript - 方法未捕获 Firestore 超时错误
问题描述
我有以下代码,当互联网速度很慢时,我无法捕获 Firestore 超时错误。它只返回空数组。
static getEspeciallyProducts() {
return new Promise(async (resolve, reject) => {
try {
const db = Firebase.firestore(),
products = [],
activeRef = await db.collection("products")
.orderBy("id")
.withConverter(ProductConverter)
.get();
for (let doc of activeRef.docs) {
const data = doc.data();
if (_.isObject(data))
products.push(data);
}
resolve(products);
} catch (error) {
reject(error);
}
});
}
但是,我的另一种方法捕获了一个错误:
static getProductById(id) {
return new Promise(async (resolve, reject) => {
try {
const docRef = Firebase.firestore().collection("products").doc(id),
doc = await docRef.withConverter(ProductConverter).get();
if (doc.exists)
resolve(doc.data());
else
resolve(null);
} catch (error) {
reject(error);
}
});
}
解决方案
如果 Internet 连接速度较慢或速度下降,Firestore 不会引发错误。它要么:
- 静默重试,直到连接可用,或者
- 放弃并回退到本地持久层。
如果是 #2,您将在控制台日志中看到一条消息。但是进行查询的代码不仅会失败。仅针对无法恢复的错误给出失败,例如违反安全规则和超出限制。
如果您希望代码在出现网络问题时失败,请考虑改用REST API。
推荐阅读
- javascript - 切换无法正常工作 - Javascript
- bash - 以比 grep-while-prinf 更简单、更优雅的方式从使用 reges 处理的日志文件中提取值
- android - app:dataBindingGenBaseClassesDebug 在 Android Studio 中失败并通过 gradlew 成功
- php - 在此服务器上找不到请求的 URL /generate/5r4reia5b7
- javascript - NgbDropdown 被列裁剪
- scala - 在 Http4s API 中将 `Option[A]` 转换为 Ok() 或 NotFound()
- wordpress - TailwindCSS 和 Wordpress – 样式插件输出
- java - FileDialog getFilterIndex() 方法返回 -1
- regex - 使用 RegEx 在 Kibana 中查询字段
- android - 未找到处理 Intent { act=com.android.car.developeroptions.action.DEMO_MODE } 的 Activity