Я создаю виджет javascript, который будет загружать iframe на страницу, но для предотвращения загрузки iframe каждый раз, когда он запрашивается, поиск API сначала необходимо проверить, что devices
, которые запрашиваются для загрузки внутри iframe, действительно существуют в базе данных.Promise.all() не получает данные, если обещание не разрешено.
Проблема у меня в том, что если элемент в products
не существует в базе данных (что весьма вероятно, произойдет), то это обещание не будет решена, и в свою очередь, останавливает Promise.all(promises).then()...
от возвращения data
и я нужен этот массив data
для передачи разрешенных устройств в iframe.
Любая помощь была бы принята с благодарностью!
function sendAPIRequest (product) {
return new Promise(function (resolve, reject) {
var url = 'http://localhost:3000/api/product_availability?__url_path_param=';
var xhr = createAPIRequest('GET', url + product);
if (!xhr) {
return;
}
xhr.onload = function() {
if (xhr.status == 200) {
resolve(product);
} else {
reject(Error(xhr.statusText));
}
};
xhr.onerror = function() {
reject(Error('Error fetching data...'));
};
xhr.send();
});
}
function formatProductName (product) {
return product.replace(/ /g,"+").toLowerCase();
}
function getProducts() {
var promises = [];
for (var i in products) {
promises.push(sendAPIRequest(formatProductName(products[i].product_name)));
}
Promise.all(promises).then(function (data) {
console.log(data);
}).catch(function (err) {
console.log(err);
});
}
getProducts();