У меня есть следующий объект, хранящийся в переменной ($gameSystem._ipLookupJSON
):
{
"www.geoplugin.net/json.gp?jsoncallback=?": {
"IP": "geoplugin_request",
"Country": "geoplugin_countryCode",
"City": "geoplugin_city"
},
"gd.geobytes.com/GetCityDetails?callback=?": {
"IP": "geobytesipaddress",
"Country": "geobytescountry",
"City": "geobytescity"
},
"ip-api.com/json": {
"IP": "ip",
"Country": "country_name",
"City": "city"
},
"ipinfo.io/json": {
"IP": "ip",
"Country": "country",
"City": "city"
}
}
Каждый из ключей в этом объекте является URL.
У меня есть функция ($._findService()
) что:
Проходит через каждый из этих ключей и отправляет их в другую функцию ($._urlExists()
), которая проверяет, является ли URL действительным / отзывчивым,
Если true, $._findService()
создает новый массив только с ключом и его элементами,
- И должен возвращать этот новый массив.
К сожалению, у меня проблемы с третьим шагом - возвращением нового массива.
У меня есть Google, и я прочитал столько, сколько смогу о Обещаниях , .then и Async / Await , но я просто не могу понять это, и в конце концов я просто смотрю на эти строки кода.
const isServiceAvailable = async url_to_check => {
console.log(url_to_check);
return await subaybay.an._urlExists("http://" + url_to_check);
};
const checkServices = async(json_data) => {
return await Promise.all(Object.keys(json_data).map(url_to_check => isServiceAvailable(url_to_check)));
};
$._findService = function(json_data) {
var url_check = checkServices(json_data);
url_check.then(function(values) {
for (i = 0; i < values.length; i++) {
if (values[i] === true) {
var service_to_use = new Promise(function(resolve, reject) {
var result = [];
result.push(json_data[Object.keys(json_data)[i]]);
result.unshift(Object.keys(json_data)[i]);
resolve(result);
});
service_to_use.then(function(value) {
console.log(value);
return value;
});
};
};
});
};
Я надеюсь, что $._findService()
вернет массив.
Но, увы, все, что я получаю, это undefined
.
Я прошу прощения, если мой код неэлегантный или красивый - я учу JavaScript только с конца февраля.