簡體   English   中英

使用Promise / Async選擇要使用的數據

[英]Choose which data to use using promise/async

我在下面嘗試了訪問datajson值,但是我現在只能訪問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.`); }); 

兌現承諾時,您將您要兌現的數據傳遞給單個值。 如果要解析多個數據,則將它們粘貼在一個對象中並使用該對象進行解析

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)
  })

另外,我想指出的是,您在不需要它們的地方創建了額外的承諾。 異步函數會自動創建Promise,因此您的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 };
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM