javascript - node.js - 无法弄清楚为什么它不等待承诺
问题描述
我对 web-dev 相当陌生,正在编写一个函数来查询我的本地 ES 节点。我已经在 Python 的 REST API POST 上花费了相当多的时间,并且相信我大致了解异步等应该如何根据该经验工作,但我无法弄清楚为什么这个特定功能不等待查询并始终回报承诺。当前的实现如下所示:
async function query (index_name, body_json){
try{
let sr = await(client.search({
index: index_name,
body: {"query": body_json,
"size": 15
}
}));
return sr
}
catch(e){
console.log(e);
throw e;
}
}
我原来的实现.then().catch()
是这样使用的:
client.search({
index: index_name,
body: {
"query": {
"match_all": {}
// this is where "body_json" param would go
},
"size": 15
}
})
.then(response => console.log(response))
.catch(error => console.log(error));
}
我也花了一些时间,但更少的时间来玩一些 la this。
根据我在网上阅读的内容,这两者在功能上是“等效的”,并且从所有这些 SO 帖子和 Medium 博客的自信语气来看,这表面上应该是微不足道地返回 JSON 结果,但事实并非如此(尚未尝试一个 la this,但注意到这里没有任何异步。如果你知道为什么会这样,那就多谢了)。
真的不确定我哪里出错了。在此先感谢您的帮助。
解决方案
从async
函数中返回某些东西与返回 Promise 是一样的。因此,您的查询函数返回一个带有client.search
. 以下代码将等待您的查询承诺并打印结果。您还可以sr
在查询函数中使用该值,因为这里的承诺也已解决。
let result = await query(some_index_name, some_body_json)
console.log(result)
这是一个关于 JavaScript Promise 和 async/await 的很棒的教程。
推荐阅读
- elixir - 使用命名参数管道进入案例
- javascript - 无法在子路径上托管 Storybook
- sql - 我在制作这个 SQL 时哪里出错了?
- python - MultiIndex index conditional formatting
- arraylist - 由于 aws_kms_info ansible 模块,无法访问密钥
- google-bigquery - 将 Retool 与 Bigquery 表连接时出现错误消息
- r - 在ggplot2中针对一列绘制多列
- javascript - 未捕获的 ReferenceError:未定义 rowOffset
- excel - 对于下一个循环失败:将 Col A(表 1)中的值匹配到 Col A(表 2),然后匹配列
- python - Numba - 使用变量索引访问 Numpy 数组