如何在1中合并这两个功能?有2个api-s:/ page1和/ page2。之后,我想将2个数组合并为一个。我这样做是因为github api在api中每页只显示100个对象。
request.get({
url: 'https://api.github.com/users/angular/repos?per_page=100&page=1',
json: true,
headers: {'User-Agent': 'request'}
}, (err, res, data) => {
if (err) {
console.log('Error:', err);
} else if (res.statusCode !== 200) {
console.log('Status:', res.statusCode);
} else {
console.log(data.length);
}
});
request.get({
url: 'https://api.github.com/users/angular/repos?per_page=100&page=2',
json: true,
headers: {'User-Agent': 'request'}
}, (err, res, data2) => {
if (err) {
console.log('Error:', err);
} else if (res.statusCode !== 200) {
console.log('Status:', res.statusCode);
} else {
});
console.log(data2.length);
}
});
谢谢!
答案 0 :(得分:1)
我会使用promises来跟踪两个请求何时完成,然后并行执行这两个请求(结果更快):
const rp = require('request-promise');
Promise.all([
rp({
url: 'https://api.github.com/users/angular/repos?per_page=100&page=1',
json: true,
headers: {'User-Agent': 'request'}
}),
rp({
url: 'https://api.github.com/users/angular/repos?per_page=100&page=2',
json: true,
headers: {'User-Agent': 'request'}
})
])).then(results => {
let combined = results[0].concat(results[1]);
// process combined results here
}).catch(err => {
console.log(err);
});
请注意,request-promise
库(它只是request
库的包装器)会自动为您检查2xx状态,因此您不需要额外的代码。
答案 1 :(得分:0)
您可以在第一个请求完成后调用第二个请求,然后使用array.concat()方法合并两个结果:
request.get({
url: 'https://api.github.com/users/angular/repos?per_page=100&page=1',
json: true,
headers: {'User-Agent': 'request'}
}, (err, res, data1) => {
if (err) return console.log('Error:', err);
if (res.statusCode !== 200) return console.log('Status:', res.statusCode);
request.get({
url: 'https://api.github.com/users/angular/repos?per_page=100&page=2',
json: true,
headers: {'User-Agent': 'request'}
}, (err, res, data2) => {
if (err) return console.log('Error:', err);
if (res.statusCode !== 200) return console.log('Status:', res.statusCode);
// merge 2 arrays:
var data = data1.concat(data2);
});
});
答案 2 :(得分:0)
您可以尝试async。它具有强大的流量控制能力。
以下代码是如何使用它来实现您的需求。 here是times
的文档。
async.times(2, (n, next) => {
request.get({
url: 'https://api.github.com/users/angular/repos?per_page=100&page=' + n,
json: true,
headers: {'User-Agent': 'request'}
}, (err, res, data) => {
next(err, data)
})
}, (err, datas) => {
// here datas contains data of two request
// and you could handle err at one place
})
希望它有所帮助。