[英]Return https get request body value from async function
我正在尝试获取 body.totalPages 值,以便可以在另一个 function 块中使用它。 它成功地控制台记录它,但是当我尝试在 getTotalGoals function 中使用它时,返回的值是未定义的。
function delay() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(42);
}, 3000);
});
}
async function getPages(endpoint, teamParam) {
var body = ''
var results = await https.get((endpoint+teamParam), res => {
res.setEncoding('utf8');
res.on("data", data => {
body += data;
});
res.on("end", () => {
body = JSON.parse(body);
return body;
});
});
await delay();
console.log(body.totalPages);
return body.totalPages;
}
async function getTotalGoals(team, year) {
// endpoint config
let endpoint = `https://jsonmock.hackerrank.com/api/football_matches?year=${year}`;
let homeParams = `&team1=${team}`;
let awayParams = `&team2=${team}`;
let homePages = 0;
let awayPages = 0;
let totalWins = 0;
homePages = await getPages(endpoint, homeParams); // undefined here
awayPages = await getPages(endpoint, awayParams);
totalWins += await getWins(endpoint+homeParams, homePages);
totalWins += await getWins(endpoint+awayParams, awayPages);
console.log(totalWins);
}
Wrap the https.get
function with a promise and return the value with the resolve()
function or return the error with the reject()
function.
例子:
function getPages(endpoint, teamParam) {
var body = ''
return new Promise(function(resolve, reject){
https.get((endpoint+teamParam), res => {
res.setEncoding('utf8');
res.on("data", data => {
body += data;
});
res.on("end", () => {
body = JSON.parse(body);
resolve(body.totalPages)
});
res.on("error", (e) => {
reject(e);
});
});
});
}
用法:
homePages = await getPages(endpoint, homeParams); // undefined here
完整代码:
function delay() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(42);
}, 3000);
});
}
function getPages(endpoint, teamParam) {
var body = ''
return new Promise(function(resolve, reject){
https.get((endpoint+teamParam), res => {
res.setEncoding('utf8');
res.on("data", data => {
body += data;
});
res.on("end", () => {
body = JSON.parse(body);
resolve(body.totalPages)
});
res.on("error", (e) => {
reject(e);
});
});
});
}
async function getTotalGoals(team, year) {
// endpoint config
let endpoint = `https://jsonmock.hackerrank.com/api/football_matches?year=${year}`;
let homeParams = `&team1=${team}`;
let awayParams = `&team2=${team}`;
let homePages = 0;
let awayPages = 0;
let totalWins = 0;
homePages = await getPages(endpoint, homeParams); // undefined here
awayPages = await getPages(endpoint, awayParams);
totalWins += await getWins(endpoint+homeParams, homePages);
totalWins += await getWins(endpoint+awayParams, awayPages);
console.log(totalWins);
}
res.on('data', () => {})
的回调不是 promise。 试试这个:
async function getPages(endpoint, teamParam) {
return new Promise((resolve, reject) => {
let body = '';
https.get((endpoint+teamParam), res => {
res.setEncoding('utf8');
res.on("data", data => {
body += data;
});
res.on("end", () => {
body = JSON.parse(body);
resolve(body.totalPages);
});
});
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.