Javascript 检查CosmosDB项是否存在,但没有try/catch
我正在使用,我想检查项目是否存在 我看到一些例子,建议如下:Javascript 检查CosmosDB项是否存在,但没有try/catch,javascript,node.js,azure-cosmosdb,Javascript,Node.js,Azure Cosmosdb,我正在使用,我想检查项目是否存在 我看到一些例子,建议如下: const i = container.item(id); try { const { item } = await i.read(); // item exists } catch(e) { // item does not exist } 但是我不想在流控制中使用异常。我还希望避免使用container.items.query——如果可能,我希望使用container.item 我能做这个吗 我想知道
const i = container.item(id);
try {
const { item } = await i.read();
// item exists
} catch(e) {
// item does not exist
}
但是我不想在流控制中使用异常。我还希望避免使用container.items.query
——如果可能,我希望使用container.item
我能做这个吗
我想知道如何执行此操作的原因是,我需要调用
Item.replace
来更新项目,因此我想执行以下操作:
const i = container.item(id);
if (i.exists() === false) {
return;
}
i.replace(replacement);
const result = container.items.query(myQuery);
if (result.current() === undefined) {
return;
}
container.item(id).replace(replacement);
但是,如果必须使用container.items.query
,则必须执行以下操作:
const i = container.item(id);
if (i.exists() === false) {
return;
}
i.replace(replacement);
const result = container.items.query(myQuery);
if (result.current() === undefined) {
return;
}
container.item(id).replace(replacement);
现在,404意味着我们扔 我们正在考虑不要扔东西。我刚刚在GitHub上创建了一个项目来跟踪它 根据文档的大小,查询实际上可能更便宜,因为您可以只查询id或_etag而不是完整文档。不过,对于小文档,阅读会更便宜 作为一种解决方法,upsert对您有效吗 --编辑1-- 另一个,有点黑客的选择是处理自己的错误,因为它的所有承诺
const handle404 = (err) => {
if(err.code && err.code === 404) {
return { body: undefined, headers: err.headers };
} else {
throw err;
}
}
const { body: item } = await container.item(id).read().catch(handle404);
为什么不在try子句中添加
replace
?SDK正在处理异常情况,因此除非您在其周围编写包装,否则它将抛出。@NickChapsas我希望避免使用异常进行流控制,就像Microsoft.Azure.Cosmos nuget一样。如果你想在阅读时不找到一个条目是一个COSMO异常,那么考虑添加SythsAsNyc。