循环处理获取请求



我的数据库中有一个用户列表,我想从Discord的API 中获取他们的数据

我无法查看数据,当我使用resolve(users.json());时,我得到TypeError:users.json不是一个函数

我的功能:

async function getTopUsers(discord_id) {
// Get Token
const token = await db.query(`SELECT accesstoken FROM tokens WHERE discord_id = ${discord_id}`);
const encryptedAccessToken = token.rows[0].accesstoken;
const decrypted = decrypt(encryptedAccessToken);
const accessToken = decrypted.toString(CryptoJS.enc.Utf8);
// Get list top users
const topUsers = await db.query(`SELECT discord_user, discord_user_points FROM discord ORDER BY discord_user_points DESC LIMIT 10`)
return new Promise(async (resolve, reject) => {
try {
const users = [];
// Loop through top users and fetch them from discord api
for (let i = 0; i < topUsers.rows.length; i++) {
const user = await fetch(`${DISCORD_API}/users/${topUsers.rows[i].discord_user}`, {
method: 'GET',
headers: { Authorization: `Bot ${process.env.DISCORDTOKEN}` }
});
users.push(user);
}
resolve(users.json());
} catch (error) {
reject(error);
}
});
}

主要问题是必须在fetch()调用的直接响应上调用.json(),而不是在数组本身上。

你也不需要将另一个承诺包裹在现有的承诺中。这是一个简化和固定的版本:

async function getTopUsers(discord_id) {
// Get Token
const token = await db.query(`SELECT accesstoken FROM tokens WHERE discord_id = ${discord_id}`);
const encryptedAccessToken = token.rows[0].accesstoken;
const decrypted = decrypt(encryptedAccessToken);
const accessToken = decrypted.toString(CryptoJS.enc.Utf8);
// Get list top users
const topUsers = await db.query(
`SELECT discord_user, discord_user_points FROM discord ORDER BY discord_user_points DESC LIMIT 10`)
const users = [];
try {
// Loop through top users and fetch them from discord api
for (let i = 0; i < topUsers.rows.length; i++) {
const resp = await fetch(`${DISCORD_API}/users/${topUsers.rows[i].discord_user}`, {
method: 'GET',
headers: { Authorization: `Bot ${process.env.DISCORDTOKEN}` }
});
const user = await resp.json();
users.push(user);
}
} catch (e) {
console.log(e);
throw e;
}
return users;
}

执行此操作的方式是创建一个响应数组。如果你想对用户进行jsonify,你可能需要进行

users.push(await user.json())

最新更新