【发布时间】:2021-12-01 07:10:58
【问题描述】:
我正在尝试使用 https.get() 从 API 获取数据的函数,以便我可以使用异步等待。这是下面的示例,它检索数据但是如果我做任何事情来访问对象,例如下面显示的theData[0],它只会返回Promise { <pending> }
为什么我无法在下面尝试异步操作?还是有更好的方法来做到这一点?基本上我只是想用 async await 做一个异步操作,我需要使用 https(而不是 fetch、axios 等)。
const myRequest = ((url) => {
return new Promise((resolve, reject) => {
https.get(url, res => {
let data = [];
res.on('data', chunk => {
data.push(chunk);
});
res.on('end', () => {
resolve(JSON.parse(data));
});
}).on('error', err => {
console.log('Error: ', err.message);
});
});
});
async function getApi() {
// write your code here
let url = [url redacted]
await myRequest(url)
.then(data => {
console.log(data[0])
})
.catch(err => {
console.log(err)
});
}
编辑:使用错误处理程序重构了我的辅助函数:
}).on('error', err => {
reject(err)
});
但是,promise 仍未正确交付。如果我对数据做一个简单的console.log
async function getApi() {
let url = [url redacted]
const data = await myRequest(url);
console.log(data)
}
它将返回Promise { <pending> },然后是 JSON:
Promise { <pending> }
{
page: 1,
per_page: 500,
total: 1,
total_pages: 1,
data: [
{
date: '5-January-2000',
open: 5265.09,
high: 5464.35,
low: 5184.48,
close: 5357
}
]
}
我可以在 console.log 中访问该对象,但是,如果我尝试访问该对象中的任何内容,它只会返回 Promise { <pending> }。如:
async function getApi() {
let url = [url redacted];
const data = await myRequest(url)
const {high, open} = data.data[0];
return `High: ${high} \n Open: ${open}`
}
【问题讨论】:
标签: javascript node.js es6-promise