Используйте обещания, чтобы получить файл JSON - PullRequest
0 голосов
/ 02 мая 2018

Я новичок в обещаниях, и у меня есть несколько вопросов по этому поводу.

Мне нужно было получить JSON-файл (с информацией о погоде) для моего приложения node.js из URL-адреса, поэтому я создал функцию 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 голосов
/ 02 мая 2018

Если я хорошо понимаю этот вопрос, вы должны вернуть обещание в вашем методе.

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));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...