Как избежать ожидающих обещаний при отправке данных из google api в discord.js? - PullRequest
0 голосов
/ 09 июня 2019

Я работаю над ботом Discord, который может извлекать данные из листа Excel. Например, когда я спрошу бота: «! Adress paul», я бы хотел, чтобы бот искал значение «paul» в столбце A листа и возвращал значение столбца B (строки, в которой значение Paul есть) в приложении раздор.

До сих пор мне удалось прочитать данные из листа Excel и сообщить данные в console.log (когда я вызываю console.log внутри функции). Однако каждый раз, когда я вызываю значение из функции, у меня появляется «Обещание {}», которое появляется ... Я провел много исследований в Интернете, не найдя решения.

const discord = require('discord.js');
const {google} = require('googleapis');
const keys = require('./identifiants.json');


// Creation of the Spreadsheet client
const client1 = new google.auth.JWT(keys.client_email, null, 
keys.private_key, ['https://www.googleapis.com/auth/spreadsheets']);

client1.authorize(function(err, tokens)
{   
    if(err)
    {
        console.log(err);
        return;
    } 
    else
    {
        console.log('Connected to Google Sheets');
    }   
});

// Creation of the Discrod client
const client2 = new discord.Client();

client2.on('ready', () => 
{
    console.log('Connected to Discord');
});

// Create an event listener for messages
client2.on('message', message => 
{
    if (message.content === '!address') 
    { 
        console.log("OK 1");

        let paul = address(client1);
        console.log(paul);
        console.log("OK2");
    }
});

async function address(client)
{   
    const gsapi = google.sheets({version:'v4',auth: client });
    const opt1 = {spreadsheetId: 'ID OF MY SPREADSHEET', range: 'Sheet1!A1:B3'};

    let data = await gsapi.spreadsheets.values.get(opt1);
    return data.data.values;
}

client2.login("MY CLIENT LOGIN")

В консоли появляется сообщение "Обещание {ожидается}" между "ОК1" и "ОК2". Может кто-нибудь помочь мне в этом случае, пожалуйста? Буду очень признателен

1 Ответ

1 голос
/ 09 июня 2019

Ваша address функция является асинхронной функцией, поэтому она возвратит обещание.

Поэтому вам нужно будет использовать then, чтобы получить значение:

client2.on('message', message => {
  if (message.content === '!address') { 

    address(client1)
      .then(paul => {
        console.log(paul);
      });

  }
});

В качестве альтернативы вы можете использовать async-await :

client2.on('message', async (message) => {
  if (message.content === '!address') { 

    let paul = await address(client1);
    console.log(paul);

  }
});
...