2017-05-11 6 views
0

私はAPIからフェッチしています。私のコードは面倒です。私はそれをクリーンアップするために.then()内の変数を設定できるかどうか疑問に思っていますか?私はこのような何かを行うことができれば変数を使用してAPIフェッチをクリーンアップできますか?

fetch.get(url) 
.then(r => message.channel.send(`Win Rate: ${r.body.us.stats.competitive.overall_stats.win_rate}\nLevel: ${r.body.us.stats.competitive.overall_stats.level}\nPrestige: ${r.body.us.stats.competitive.overall_stats.prestige}\nWins: ${r.body.us.stats.competitive.overall_stats.wins}\nLosses: ${r.body.us.stats.competitive.overall_stats.losses}\nGames: ${r.body.us.stats.competitive.overall_stats.games}\nCompetitive Rank: ${r.body.us.stats.competitive.overall_stats.comprank}`)); 

ので、私は一度だけのプロパティの大規模なチェーンを持っている必要が完璧になる:

var stats = r.body.us.stats.competitive.overall_stats 

私は

stats.level 
stats.prestige 
ような何かを行うことができますその方法

など

また、関数外のオブジェクトを参照したいと思いますそれを行う最善の方法になるのですか?私は.jsonファイルに保存することを検討しましたが、どうやって行くのか、それが最善の方法なのかどうかはわかりません。私は.then内の変数を設定することができるかどう

答えて

2

私は思ったんだけど()

することができます。もちろん、

は、 thenは任意のコールバック関数を取ります!

fetch.get(url).then(r => { 
    var stats = r.body.us.stats.competitive.overall_stats; 
    return message.channel.send(`Win Rate: ${stats.win_rate} 
Level: ${stats.level} 
Prestige: ${stats.prestige} 
Wins: ${stats.wins} 
Losses: ${stats.losses} 
Games: ${stats.games} 
Competitive Rank: ${stats.comprank}`); 
}); 

テンプレートリテラルは改行をサポートしています。

また、私は機能

の外でこれらのオブジェクトを参照したいと思いません、値が非同期約束コールバック内でのみ使用可能です。もちろん、約束を変数に格納して、いつでも好きなだけ多くのthenコールバックを添付することができます。

関連する問題