对于学校作业,我必须创建一个执行api调用的循环并将这些结果添加到数组中。我如何在Node JS中做到这一点?
我的代码的作用说明: 该函数获取宠物小精灵的所有位置。 当1公里范围内少于10个口袋妖怪时 它添加了剩余的口袋妖怪。所以你总是至少有10个口袋妖怪附近。 在那些添加过程中,它必须得到一个随机口袋妖怪的随机位置。 使用pokeapi(.co)通过随机整数(最大720)完成随机 最终结果仍将是所有口袋妖怪的列表。无论你是否需要添加一些,都可以。
问题是我不知道如何为每个'toAdd做api调用。并将它们添加到数组中。默认情况下它是异步。
下面我添加了我当前的代码,几条评论描述了我需要的内容。
router.get('/', function(req, res) {
var startDate = new Date();
if (!req.query.lat || !req.query.lng) {
res.status(400).json("Your location has not been included");
}
var lat = parseFloat(req.query.lat);
var lng = parseFloat(req.query.lng);
location.count({}, function(err, count) {
console.log(count);
});
location.find({}).exec(function(err, locations) {
if (err) {
return next(err);
}
var filteredlocations = [];
locations.forEach(function(fetchedLocation) {
distance = calcDistance(fetchedLocation.lat, fetchedLocation.lng, lat, lng);
if (distance < 1000) {
filteredlocations.push(fetchedLocation);
}
});
if (filteredlocations.length < 10) {
var toAdd = 10 - filteredlocations.length;
console.log(toAdd);
var newlocations = [];
for (var i = 0; i < toAdd; i++) {
var randomlocation = randomLocation(lat, lng);
// random id = random
var pokemon;
var options = {
host: 'pokeapi.co',
port: 80,
path: '/api/v2/pokemon/?limit=720',
method: 'GET'
};
// This needs to fill the pokemon at a non-async method
http.get(options, function(response) {
var content = '';
response.on('data', function(chunk) {
content += chunk;
});
response.on('end', function() {
var object = JSON.parse(content);
pokemon = {
{
"pid": object.id,
"name": object.name
})
});
});
var newlocation = //new location({
{
"lat": randomlocation.lat,
"lng": randomlocation.lng,
"pid": pokemon.pid,
"name": pokemon.name,
};
newlocations.push(newlocation);
}
location.collection.insert(newlocations, function(err, docs) {
if (err) {
console.log("err: " + err);
} else {
docs.ops.forEach(function(doc) {
locations.push(doc);
});
return res.json(locations);
}
});
} else {
console.log('niets toegevoegd');
return res.json(dlocations);
}
});
});