Javascript 如何使用riot lol api在一行中发出多个请求?
情况:Javascript 如何使用riot lol api在一行中发出多个请求?,javascript,node.js,promise,Javascript,Node.js,Promise,情况: var urls = []; for (var i = 0; i < enemies.length; i++) { urls.push('/lol/league/v3/positions/by-summoner/'+enemies[i].summonerId); } let promises = urls.map(url => fetchData(url, region, "league")); Promise.all(
var urls = [];
for (var i = 0; i < enemies.length; i++) {
urls.push('/lol/league/v3/positions/by-summoner/'+enemies[i].summonerId);
}
let promises = urls.map(url => fetchData(url, region, "league"));
Promise.all(promises).then(responses => {
console.log("RESPONSES: "+responses);
RESPONSES: ,,,,
我有一个现有的代码库,它使用另一个库向riotapi发出请求。遗憾的是,他说图书馆有一些问题,所以我决定换成这个:
唯一的问题:这个库似乎没有使用承诺,而旧库使用了承诺,我很难使我的代码适应这个新库
代码:
var urls = [];
for (var i = 0; i < enemies.length; i++) {
urls.push('/lol/league/v3/positions/by-summoner/'+enemies[i].summonerId);
}
let promises = urls.map(url => fetchData(url, region, "league"));
Promise.all(promises).then(responses => {
console.log("RESPONSES: "+responses);
RESPONSES: ,,,,
当然,这不起作用,但考虑它是伪代码来解释我想在这里实现什么。
输出:
var urls = [];
for (var i = 0; i < enemies.length; i++) {
urls.push('/lol/league/v3/positions/by-summoner/'+enemies[i].summonerId);
}
let promises = urls.map(url => fetchData(url, region, "league"));
Promise.all(promises).then(responses => {
console.log("RESPONSES: "+responses);
RESPONSES: ,,,,
问题:
var urls = [];
for (var i = 0; i < enemies.length; i++) {
urls.push('/lol/league/v3/positions/by-summoner/'+enemies[i].summonerId);
}
let promises = urls.map(url => fetchData(url, region, "league"));
Promise.all(promises).then(responses => {
console.log("RESPONSES: "+responses);
RESPONSES: ,,,,
如何使我的代码适应新的库?当我编写库时,承诺非常缓慢。使用Promissions,我可以在每个CPU上每秒发送700个请求,而没有Promissions,我可以在每个CPU上每秒发送1000个请求 如果性能不是您的问题,您可以使用以下小包装器将回调样式函数转换为承诺:
let RiotRequest = require('riot-lol-api');
let riotRequest = new RiotRequest('<your-key>');
// This function will return a promise that you can then use with Promise.all
function promisifiedRequest(region, group, endpoint) {
return new Promise((resolve, reject) => {
riotRequest.request(region, group, endpoint, function(err, res) {
if(err) {
reject(err)
}
else {
resolve(res);
}
})
});
}
// Example use:
promisifiedRequest('euw1', 'summoner', '/lol/summoner/v3/summoners/by-name/graphistos').then(function(response) {
console.log("Result:", response);
}).catch(console.log)
让RiotRequest=require('riot-lol-api');
让riotRequest=新的riotRequest(“”);
//此函数将返回一个promise,然后可以与promise.all一起使用
功能promisifiedRequest(区域、组、端点){
返回新承诺((解决、拒绝)=>{
请求(区域、组、端点、函数(err、res){
如果(错误){
拒绝(错误)
}
否则{
决议(res);
}
})
});
}
//示例用法:
promisifiedRequest('euw1','召唤者','/lol/召唤者/v3/召唤者/by name/graphistos')。然后(函数(响应){
日志(“结果:”,响应);
}).catch(console.log)
太棒了!非常感谢。既然使用承诺会带来性能成本,那么有没有什么方法可以在不使用承诺的情况下实现我想要做的事情?(也就是说,同时有多个请求,并且收到的响应与请求的顺序相同?)