使用promises获取JSON文件

时间:2018-05-02 18:33:26

标签: node.js promise

我是承诺的新手,我对这些有一些疑问。

我需要从url为我的node.js应用程序获取一个JSON文件(有天气的东西)所以我创建了一个getJSON()函数,该函数使用“返回”文件的https模块const https = require('https');

function getJSON(url, resolve) {
    https.get(url, function(res) {
        let json = '';
        res.on('data', function(chunk) { json += chunk; });
        res.on('end', function() { resolve(JSON.parse(json)); });
    }).on('error', function(err) { console.log(err); });
};

正如你所看到的那样,它实际上并没有返回值,而是解析了它,因为我正在用一个承诺来调用函数:

function weather() {
    let json = new Promise(function(res) {getJSON('https://api.openweathermap.org/data/2.5/weather?APPID=APIKEY&q=City&units=metric', res);})
                json.then(function(weatherJSON) {
                    // and here i can use the file
                });
}

所以这可行,但我觉得它可能会更好,我可以优化吗?我甚至不应该使用承诺吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果我理解这个问题,你就会在你的方法中回复一个承诺。

function getJSON(url) {
    return new Promise(function(resolve, reject) {
        const req = https.get(url, res => {
            let json = '';
            res.on('data', function(chunk) { json += chunk; });
            res.on('end', function() { resolve(JSON.parse(json)); });
        });
        req.on('error', function(err) { console.log(err); });
    });
};

    const weather = () => {

        getJSON('yourURL')
            .then((data) => console.log(data))
            .catch((error) => console.error(error));
    }