Как экспортировать вложенную функцию как модуль - PullRequest
1 голос
/ 15 февраля 2020

Я бы хотел экспортировать вложенную функцию.

Существует этап аутентификации, а затем вызов службы.

Шаг аутентификации должен быть передан на вызов сервису, который является вложенным.

Я следую основному коду Google c:

const fs = require(`fs`);
const readline = require(`readline`);
const {google} = require(`googleapis`);
require(`dotenv`).config();

module.exports = {
    authFunction: function(params){  <--------------------------- Am currently exporting this 


        // If modifying these scopes, delete token.json.
        const SCOPES = [`https://www.googleapis.com/auth/service`];
        // The file token.json stores the user's access and refresh tokens, and is
        // created automatically when the authorization flow completes for the first
        // time.
        const TOKEN_PATH = `token.json`;

        // Load client secrets from a local file.
        fs.readFile(`credentials.json`, (err, content) => {
            if (err) return console.log(`Error loading client secret file:`, err);
            // Authorize a client with credentials, then call the Google Service API.
            authorize(JSON.parse(content), doStuff);
        });

        /**
 * Create an OAuth2 client with the given credentials, and then execute the
 * given callback function.
 * @param {Object} credentials The authorization client credentials.
 * @param {function} callback The callback to call with the authorized client.
 */
        function authorize(credentials, callback) {
            const {client_secret, client_id, redirect_uris} = credentials.installed;
            const oAuth2Client = new google.auth.OAuth2(
                client_id, client_secret, redirect_uris[0]);

            // Check if we have previously stored a token.
            fs.readFile(TOKEN_PATH, (err, token) => {
                console.log(JSON.parse(token))
                if (err) return getAccessToken(oAuth2Client, callback);
                oAuth2Client.setCredentials(JSON.parse(token));
                callback(oAuth2Client);
            });
        }

        /**
 * Get and store new token after prompting for user authorization, and then
 * execute the given callback with the authorized OAuth2 client.
 * @param {google.auth.OAuth2} oAuth2Client The OAuth2 client to get token for.
 * @param {getEventsCallback} callback The callback for the authorized client.
 */
        function getAccessToken(oAuth2Client, callback) {
            const authUrl = oAuth2Client.generateAuthUrl({
                access_type: `offline`,
                scope: SCOPES,
            });
            console.log(`Authorize this app by visiting this url:`, authUrl);
            const rl = readline.createInterface({
                input: process.stdin,
                output: process.stdout,
            });
            rl.question(`Enter the code from that page here: `, (code) => {
                rl.close();
                oAuth2Client.getToken(code, (err, token) => {
                    if (err) return console.error(`Error retrieving access token`, err);
                    oAuth2Client.setCredentials(token);
                    // Store the token to disk for later program executions
                    fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => {
                        if (err) return console.error(err);
                        console.log(`Token stored to`, TOKEN_PATH);
                    });
                    callback(oAuth2Client);
                });
            });
        }

        /**
 * Do some stuff.
 * @param {google.auth.OAuth2} auth An authorized OAuth2 client.
 */
        function doStuff(auth) { <--------------Would like to make this async and export it form this module



            const service = google.service({version: `v3`, auth});
            service.object.dosomething({
                auth: auth,

            }, function(err, event) {
                if (err) {
                    console.log(`There was an error contacting the service: ` + err);
                    return;
                }
                console.log(`Success`);
            }, (err, res) => {
                if (err) return console.log(`The API returned an error: ` + err);

            });
        }
    },
};

Я хотел бы использовать async / await и сделать doStuff экспортированной асинхронной c функцией, которую я могу вызвать в другом месте.

Я попробовал все очевидное, например, перемещение оператора экспорта, присвоение переменных и т. Д. c.

Как я могу экспортировать doStuff как асин c функцию вместо authFunction?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...