从 google api 向 discord.js 发送数据时如何避免未决承诺?
How to avoid pending promises when sending data from google api to discord.js?
我正在开发一个 Discord 机器人,它可以从 Excel sheet 中提取数据。例如,当我询问机器人时:“!adress paul”,我希望机器人在 sheet 的 A 列中查找 "paul" 值,而 return 的值discord 应用程序中的 B 列(Paul 所在的行)。
至此,我成功从Excelsheet中读取数据并在console.log中报告数据(当我在函数中调用console.log时) .但是,每次我从函数中调用值时,都会出现 'Promise {}' ...我在网上进行了很多研究,但没有找到解决方案。
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")
在控制台中,消息 "Promise {pending}" 出现在 "OK1" 和 "OK2" 之间。有人可以帮我解决这个问题吗?非常感谢
您的 address
函数是一个 async 函数,因此它将 return 一个承诺。
因此,您将需要使用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);
}
});
我正在开发一个 Discord 机器人,它可以从 Excel sheet 中提取数据。例如,当我询问机器人时:“!adress paul”,我希望机器人在 sheet 的 A 列中查找 "paul" 值,而 return 的值discord 应用程序中的 B 列(Paul 所在的行)。
至此,我成功从Excelsheet中读取数据并在console.log中报告数据(当我在函数中调用console.log时) .但是,每次我从函数中调用值时,都会出现 'Promise {}' ...我在网上进行了很多研究,但没有找到解决方案。
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")
在控制台中,消息 "Promise {pending}" 出现在 "OK1" 和 "OK2" 之间。有人可以帮我解决这个问题吗?非常感谢
您的 address
函数是一个 async 函数,因此它将 return 一个承诺。
因此,您将需要使用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);
}
});