运行下面的代码后,我在 console.log 中得到未定义的信息。
我试图返回已解决的 Promise,但失败了。没有错误。
控制台输出为:getData(): undefined
有人能发现我的问题吗?
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();
最佳答案
您可以将 await
视为“拆包” promise 。目前,您的 getData
没有返回 Promise
,因此没有任何内容可以“解压”。尽管您确实在函数内返回了 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();
关于javascript - Node.js 将数据返回到异步函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54729995/