繁体   English   中英

如何在nodejs中将数据从http.get返回给父级function

[英]How to return data from http.get to parent function in nodejs

任务是从getData function返回数据给main function。

function getData(){
    const https = require('https')
    const url = "https://...../api/movies";
    https.get(url, res => {
      let data = '';
      res.on('data', chunk => {
        data += chunk;
      });
      res.on('end', () => {
        data = JSON.parse(data);
        console.log(data);
        //How can I return this data to main function?
      })
    }).on('error', err => {
      console.log(err.message);
    })
}
function main(){
    console.log(getData());
}

我无法访问主 function 中的数据或打印数据

我认为您在评论中已经有了答案“//我如何将此数据返回到主 function?”。

...
res.on('end', () => {
        data = JSON.parse(data);
        console.log(data);
        return data;
      })
...

因此,您的 getData 函数的返回值现在应该是解析后的 json 数据,并且可以在主函数中访问。

我会创建一个变量来保存你想要返回的值

const https = require('https')

function getData() {
    let ret = null;
    
    const url = "https://...../api/movies";

    https.get(url, res => {
      let data = '';
      res.on('data', chunk => {
        data += chunk;
      });
      res.on('end', () => {
        ret = JSON.parse(data);
      })
    }).on('error', err => {
      console.log(err.message);
    })
    
    return ret;
}

function main() {
    console.log(getData());
}

您可以做的是将您的请求包装到Promise中。 你会想要返回这个 promise 并等待它被填满:

function getData() {

    const url = "https://...../api/movies";

    return new Promise((resolve, reject) => {
        const req = https.get(url, (res) => {
            let data = '';

            res.on('data', (chunk) => {
                data += chunk;
            });

            res.on('end', () => {
                resolve(JSON.parse(data));
            });
        });

        req.on('error', (err) => {
            reject(err);
        });

        req.end();
    });
}

function main() {
    getData().then(data => {
        console.log("Response:", data);
    }, error => {
        console.error(error);
    });
}

此外,您可以使main function async并使用await来获取响应:

async function main() {
    const data = await getData();
    console.log(data);
}

// Start an IIFE to use `await` at the top level. See: https://stackoverflow.com/a/14220323/7661119
(async () => {
    await main()
})();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM