我正在尝试获取body.totalPages值,这样我就可以在另一个函数块中使用它。它成功地console.logs了它,但是当我尝试在getTotalGoals函数中使用它时,返回值是未定义的。
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);
}发布于 2020-12-22 13:01:32
使用promise包装https.get函数,并使用resolve()函数返回值,或者使用reject()函数返回错误。
示例:
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);
}发布于 2020-12-22 12:53:51
res.on('data', () => {})的回调并不是一个承诺。试着这样做:
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);
});
});
});
}https://stackoverflow.com/questions/65403304
复制相似问题