首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从异步函数返回https get请求正文值

从异步函数返回https get请求正文值
EN

Stack Overflow用户
提问于 2020-12-22 12:31:48
回答 2查看 223关注 0票数 0

我正在尝试获取body.totalPages值,这样我就可以在另一个函数块中使用它。它成功地console.logs了它,但是当我尝试在getTotalGoals函数中使用它时,返回值是未定义的。

代码语言:javascript
复制
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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-22 13:01:32

使用promise包装https.get函数,并使用resolve()函数返回值,或者使用reject()函数返回错误。

示例:

代码语言:javascript
复制
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);
            });
        });
    });
    
}

用法:

代码语言:javascript
复制
homePages = await getPages(endpoint, homeParams); // undefined here

完整代码:

代码语言:javascript
复制
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);
}
票数 2
EN

Stack Overflow用户

发布于 2020-12-22 12:53:51

res.on('data', () => {})的回调并不是一个承诺。试着这样做:

代码语言:javascript
复制
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);
            });
        });
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65403304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档