Я мог бы заставить эту функцию работать в одном файле, но я хотел бы сохранить вещи в чистоте, разделив их на несколько файлов.

// library.js file
module.exports = {
    get: () =>{
        return new Promise((reject, resolve) =>{
            return resolve(https.get('https://api.instagram.com/v1/users/self/?access_token=' + cred.access_token, (res) =>{
                res.setEncoding('utf8');
                return res.on('data', (data) =>{
                    return data;
                });
            }));
        });
    }
}

Я пытался записать это, но ничего не показывало?

// server.js file
igLib.get().then((data) => {
    console.log("testing: " + data);
})

Однако, если я просто сделаю простой журнал ..

// server.js file
console.log(igLib.get());

Я как-то получаю данные без res.setEncoding('utf8').

Любые советы о том, что делать?

< Сильный > Update : Я не мог заставить обещание работать, и я извиняюсь перед людьми, которые предоставили мне хорошие ответы на мою проблему, но я пошел дальше и использовал вместо этого модуль запроса-обещания. Вот как это выглядит:

// library.js file
var instagramSelfUrl = 'https://api.instagram.com/v1/users/self/?access_token=' + cred.access_token;

module.exports = {
    get: () =>{
        return rp(instagramSelfUrl).then((res) =>{
            return res;
        });
    }
}

И вот где я console.log:

// server.js file
    igLib.get().then((data) =>{
    console.log(data);
});

Это проще, и это работает. Если есть решение проблемы, отличное от использования модуля, чтобы это работало, пожалуйста, сообщите об этом и опубликуйте! Спасибо всем, кто написал и помог!

0
Edrich 29 Авг 2017 в 07:33

3 ответа

Лучший ответ

Обещание, которое вы создаете, должно соответствовать данным из ответа.

// library.js file
const https = require('https');
const instagramSelfUrl = 'https://api.instagram.com/v1/users/self/?access_token=' + cred.access_token;

module.exports = {
    get: () => new Promise(function (resolve, reject) {
        https.get(instagramSelfUrl, res => {
            var chunks = [];
            res.setEncoding('utf8');
            res.on('data', chunk => chunks.push(chunk));
            res.on('end', () => resolve(chunks.join('')));
        });
    })
};

На самом деле, вышесказанное является неполным и хрупким. Например, ошибки запроса или статус ответа 500 должны отклонять обещание, но обработка ошибок отсутствует. Или, если ответ на самом деле не UTF-8, он неправильно декодирует данные. И это только две наиболее очевидные проблемы здесь.

Обещание HTTP-запросов - решенная проблема. Я настоятельно рекомендую вам использовать одну из доступных библиотек вместо того, чтобы использовать собственный код, который делает все ошибки снова и снова.

const request = require('request-promise');
const instagramSelfUrl = 'https://api.instagram.com/v1/users/self/?access_token=' + cred.access_token;

module.exports = {
    get: () => request(instagramSelfUrl)
};

Теперь функция завершена и ведет себя правильно, даже в угловых случаях. Он также настолько короткий, что вряд ли оправдывает написание отдельной функции.

1
Tomalak 29 Авг 2017 в 21:26

Кажется, вы не вернете данные правильно, попробуйте это:

// library.js file
module.exports = {
    get: () =>{
        return new Promise((reject, resolve) =>{
            https.get('https://api.instagram.com/v1/users/self/?access_token=' + cred.access_token, (res) =>{
                res.setEncoding('utf8');
                return res.on('data', (data) =>{
                    return resolve(data);
                });
            });
        });
    }
}
0
Juorder Gonzalez 29 Авг 2017 в 04:42

Вы можете сделать что-то вроде этого

module.exports = {
    get: () =>{
        return new Promise((resolve, reject) =>{
            https.get('https://api.instagram.com/v1/users/self/?access_token=' + cred.access_token, (res) =>{
                res.setEncoding('utf8');
                res.on('data', (data) =>{
                    resolve(data);
                });
            }).on('error', (e) => reject(e))
        });
    }
}

Чтобы получить дополнительную информацию, вы можете посетить https: //developer.mozilla .org / о / Docs / Web / JavaScript / Справка / Global_Objects / Promise

0
Arun Redhu 29 Авг 2017 в 05:00