Node.js将数据返回异步函数失败
运行下面的代码后,我在console.log中得到了未定义。
我试图返回一个已解决的Promise,但它失败了。没有错误。
控制台输出是:getData():undefined
谁能发现我的问题?
function getData(){
var url = '';
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
视为“解包”承诺。目前你的getData
没有返回Promise
,所以没有什么可以“解包”。虽然你在函数中执行return new Promise
,但实际上你回到内部回调函数,而不是你的外部getData
函数。
因此,您需要将您的.get
方法包装在Promise中,并解析数据:
function getData() {
var url = 'https://pigfox/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();
Node.js将数据返回异步函数失败
运行下面的代码后,我在console.log中得到了未定义。
我试图返回一个已解决的Promise,但它失败了。没有错误。
控制台输出是:getData():undefined
谁能发现我的问题?
function getData(){
var url = '';
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
视为“解包”承诺。目前你的getData
没有返回Promise
,所以没有什么可以“解包”。虽然你在函数中执行return new Promise
,但实际上你回到内部回调函数,而不是你的外部getData
函数。
因此,您需要将您的.get
方法包装在Promise中,并解析数据:
function getData() {
var url = 'https://pigfox/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();