我正在构建一个 javascript 小部件,该小部件会将 iframe 加载到页面上,但为了防止 iframe 在每次请求时加载,首先需要进行 API 查找来检查该 设备
被请求加载的iframe里面实际上存在于数据库中。
我遇到的问题是,如果数据库中不存在products
中的项目(这很可能发生),那么该 promise 将不会得到解决,进而停止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();
最佳答案
Promise.all().done
在所有 Promise 都得到解决后被调用。你拒绝了一些 promise 。
要么实现fail
,要么always解决,并带有成功或错误值。这实质上将您的错误处理移至下游。
if (xhr.status == 200) {
resolve({ status: "ok", product: product });
} else {
resolve({ status: "fail" });
}
您还可以认为对不存在产品的请求成功并返回错误正文而不是产品数据。
关于javascript - 如果 promise 未解决,Promise.all() 不会接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30374188/