Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查CosmosDB项是否存在,但没有try/catch_Javascript_Node.js_Azure Cosmosdb - Fatal编程技术网

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。