运行下面的代码后,在console.log中未定义。
我正在尝试返回已解决的Promise,但失败了。没有错误。
控制台输出为:getData():未定义
有人可以发现我的问题吗?
function getData(){
var url = 'https://pigfox.com/api/v1/test';
https.get(url, res => {
res.setEncoding("utf8");
res.on('data', data => {
return new Promise(resolve => {
resolve(data);
});
});
});
}
async function go(){
var rs = await getData();
console.log('getData(): ' + rs);
}
go();
答案 0 :(得分:3)
您可以将await
视为“解开”承诺。目前,您的getData
未返回Promise
,因此没有可“解包”的内容。尽管您在函数内执行return new Promise
,但实际上是在返回内部回调函数,而不是外部getData
函数。
因此,您需要将.get
方法包装在Promise中,并解析数据:
function getData() {
var url = 'https://pigfox.com/api/v1/test';
return new Promise(resolve => { // getData returns a promise
https.get(url, res => {
res.setEncoding("utf8");
res.on('data', data => {
resolve(data); // resolve data which can be "unpacked" using await
});
});
});
}
async function go() {
var rs = await getData(); // now we can "unpack" the promise
console.log('getData(): ' + rs);
}
go();