node.js - 从函数返回超级代理响应对象
问题描述
我正在使用superagent从 Node.s 进行 HTTP API 调用,这就是我的代码现在的样子:
async function getProjectParameterValue(projectId, parameter) {
let projectParamsUrl = "some/endpoint" + projectId + "/parameters/";
let url = "http://baseUrl/" + projectParamsUrl + parameter;
return await superagent.get(url).auth(userName, password)
.type('json')
.accept('json')
.then(response => {
return response.body;
})
.then(responseBody => {
return responseBody;
});
}
在这种情况下,该函数getProjectParameterValue
返回一个必须在外部调用它后解决的承诺,如下所示:
getProjectParameterValue("myProjectId", "someParameter")
.then(responseBody => {
log.info(responseBody);
});
我正在寻找某种方法让函数getProjectParameterValue
直接返回超级代理响应对象。有什么办法可以做到这一点?
解决方案
所以有几件小事:
- 一个 Promise 解析为它的返回值
- 当它等待的 aync 行为完成时,Promise 将解析
- 您可以“等待” Promise 的已解决值,或返回 Promise 并使用 .then() 创建具有新已解决值的新 Promise
在你的例子中。你的 Promise 解析为响应的正文,因此使用该 Promise 的任何人都只能访问响应正文。
因此,您希望解决响应本身而不是正文。
另请注意,当返回 Promise 时,无需添加 aync/await。所有这一切都是添加另一个解析为现有解析值的 .then() ,这是不必要的
function getProjectParameterValue(projectId, parameter) {
const url = `http://baseUrl/some/endpoint${projectId}/parameters/${parameter}`;
return superagent
.get(url)
.auth(userName, password)
.accept('json');
}
getProjectParameterValue("myProjectId", "someParameter")
.then((res) => {
log.info(res.body);
});
替代等待:
function getProjectParameterValue(projectId, parameter) {
const url = `http://baseUrl/some/endpoint${projectId}/parameters/${parameter}`;
return superagent
.get(url)
.auth(userName, password)
.accept('json');
}
const res = await getProjectParameterValue("myProjectId", "someParameter")
log.info(res.body);
推荐阅读
- google-apps-script - 在我进行新部署后,Gmail 插件会抛出“缺少标识符的库(可能它已被删除,或者您没有读取权限?)”
- sql - SQL CASE 当值为零时,从另一行返回具有相同值的值
- ruby - 如何修改默认的 docker“rails server”命令以使用 https?
- c - 为什么这段代码在结构中包含冒号?
- sql-server - 多个主键连接2个表
- javascript - 在不牺牲性能的情况下使用反应路由器
- javascript - 使用 Cypress 测试重定向到新的超级域
- c - 给定一个虚拟地址,输出给定地址的页码和偏移量
- postgresql - 我可以将查询分解为 PostgreSQL 中的函数吗
- sql - 如何复制行但更改特定列postgresql中的值 - 红移