Выберите, какие данные использовать, используя обещание / асинхронность - PullRequest
0 голосов
/ 30 августа 2018

Я попробовал следующее, чтобы получить доступ к значениям data и json, однако теперь я могу получить доступ только к значениям data, что я могу сделать, чтобы также получить доступ к значениям json?

const getUser = user => new Promise(async (resolve, reject) => {
	try {
		const read = await snekfetch.get('https://www.website.nl/api/public/users?name=' + user);
		const data = JSON.parse(read.text);
		const result = await snekfetch.get('https://www.website.com/api/public/users/' + data.uniqueId + '/profile');
		const json = JSON.parse(result.text);
		resolve(data, json);
	} catch (error) {
		reject(error);
	}
});
const promise = Promise.resolve(getUser(args[0]));
promise.then(function(data, json) {
	const name = data.name;
	const motto = data.motto;
	const memberSince = data.memberSince;
	const groups = json.groups.length;
	const badges = json.badges.length;
	const friends = json.friends.length;
	const rooms = json.rooms.length;
	message.channel.send(`${name}\n${motto}\n${memberSince}\n${groups || 'N/A'}\n${badges || 'N/A'}\n${friends || 'N/A'}\n${rooms || 'N/A'}\n`);
}).catch(function(err) {
	console.log(err);
	return message.reply(`${args[0]} does not exists.`);
});

1 Ответ

0 голосов
/ 30 августа 2018

когда вы разрешаете обещание, вы передаете одно значение с данными, с которыми вы хотите его разрешить. Если есть несколько фрагментов данных, которые вы хотите разрешить, то вставьте их в объект и разрешите с этим объектом

const getUser = user => new Promise(async (resolve, reject) => {
  try {
    const read = await snekfetch.get('https://www.website.nl/api/public/users?name=' + user);
    const data = JSON.parse(read.text);
    const result = await snekfetch.get('https://www.website.com/api/public/users/' + data.uniqueId + '/profile');
    const json = JSON.parse(result.text);
    resolve({ data, json }); // <--- created an object with two properties
  } catch (error) {
    reject(error);
  }
});

getUser('someUser')
  .then((result) => {
    console.log(result.data)
    console.log(result.json)
  })

Кроме того, я хочу отметить, что вы создаете дополнительные обещания там, где они не нужны. Асинхронные функции автоматически создают обещания, поэтому ваша функция getUser может быть просто:

const getUser = async (user) => {
  const read = await snekfetch.get('https://www.website.nl/api/public/users?name=' + user);
  const data = JSON.parse(read.text);
  const result = await snekfetch.get('https://www.website.com/api/public/users/' + data.uniqueId + '/profile');
  const json = JSON.parse(result.text);
  return { data, json };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...