node.js에서 연습을하고 있습니다. 이 연습에서는 페이지 정수를 매개 변수로 전달하는 엔드 포인트에 대한 GET Http 요청을 통해 국가 이름을 찾도록 요청 받았습니다. 중요한 응답 구조는 {page, total_pages, data}입니다.
페이지는 현재 페이지입니다.
total_pages는 마지막 페이지입니다.
데이터는 10 개 국가 개체의 배열입니다.
getCountryName func 에서는 답이 첫 번째 페이지 인 루프의 1 회 반복에있는 경우에만 정답을 검색 할 수 있습니다. 그렇다면 루프가 한 번만 발생하는 이유는 무엇입니까? 추가로 total_pages를 검색하여 하드 코드 '25'값을 바꾸고 싶었지만 검색과 함께 반환하는 방법을 파악하지 못했습니다.
나에게주고 싶은 힌트가 있습니까? 전체 문제는 getCountryCode func에 있습니다.
'use strict';
const { Console } = require('console');
const https = require('https');
function makeRequest(page){
return new Promise(resolve => {
let obj='';
https.get('https://jsonmock.hackerrank.com/api/countries?page='+page, res => {
let data ='';
res.on('data',function(chunk){
data+=chunk;
});
res.on('end',function(){
obj=JSON.parse(data);
resolve(obj);
});
});
});
}
async function getCountryName(code) {
var res = '';
var pages = 25;
var i = 1;
while(i <= pages && res == ''){
console.log(i);
res = makeRequest(i)
.then(data => {
let f = ''
let p = data['total_pages'];
let search = data['data'].find(o => o.alpha3Code === code);
f = search != null ? search['name'] : f;
return f;
});
i++;
}
return res;
}
async function main() {
const name = await getCountryName('ARG');
console.log(`${name}\n`);
}
main();
코드를 너무 많이 수정하지 않고 다음과 같이합니다.
'use strict';
const { Console } = require('console');
const https = require('https');
function makeRequest(page){
return new Promise(resolve => {
let obj='';
https.get('https://jsonmock.hackerrank.com/api/countries?page='+page, res => {
let data ='';
res.on('data',function(chunk){
data+=chunk;
});
res.on('end',function(){
obj=JSON.parse(data);
resolve(obj);
});
});
});
}
async function getCountryName(code) {
const pages = 25;
var i = 1;
let f = null
while(i <= pages && f === null){
console.log(i);
const data = await makeRequest(i) // put in try/catch
const p = data['total_pages'];
const search = data['data'].find(o => o.alpha3Code === code);
f = search !== null ? search['name'] : null;
i++;
}
return res;
}
async function main() {
const name = await getCountryName('ARG');
console.log(`${name}\n`);
}
main();
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다