node.js - Node.js pomise 异步方法返回未定义
问题描述
我使用 Promise 创建了一个 node.js 应用程序。我有以下代码
async clientCall() {
const baseUrl = 'https://localhost:44300/test';
const queryString = '';
var options = {
uri: baseUrl + queryString,
};
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
var result = await request.get(options, function (err: any, res: any, body: any) {
console.log("Result: ", body)
return body;
})
console.log("response:",result);
// return result;
}
await ClientRepository.clientCall().then(data => {
console.log("inside data: ",data)
return data;
})
但我得到了这样的输出
response:
Result: My response
inside data: undefined
inside data: My response
只有在等待请求完成后,我才需要返回响应。
解决方案
我认为以下是您的解决方案。如果将 Promise 传递给 await 表达式,它会等待 Promise 完成并返回已完成的值。
async function clientCall() {
return new Promisse((resolve, reject) => {
const baseUrl = 'https://localhost:44300/test';
const queryString = '';
var options = {
uri: baseUrl + queryString,
};
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
request.get(options, function (err: any, res: any, body: any) {
resolve(body);
})
});
}
async function callClientCall(){
let clientCallResult = await ClientRepository.clientCall();
}
简单的例子:
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function f1() {
var x = await resolveAfter2Seconds(10);
console.log(x); // 10
}
f1();
推荐阅读
- c - 该程序关于 void 指针的输出
- javascript - 如何将所有输入的偶数显示到
使用 Javascript
- r - 为什么 R 中的名称不通过 list(x, y, z) 传递?
- python - 使用此函数的 bot.set_my_command() 如何设置命令以及如何传递参数
- docker - docker compose 文件中的美元符号是什么?
- javascript - 如何处理错误:等待 Node 和 React 时套接字挂起
- python-3.x - 如何列出 Django 中的所有用户组?
- c++ - 大写字母
- python - Python中的黑白/灰色条形图
- yaml - 在 TypoScript 条件下使用站点配置常量