У меня около 650 товаров, и у каждого товара есть много дополнительной информации, связанной с ним, которая хранится в метаполях. Мне нужно, чтобы вся информация метаполя была сохранена в массиве, чтобы я мог фильтровать определенные биты информации и отображать их пользователю.
Чтобы получить все метафайловые данные, вам нужно сделать один вызов API для каждого продукта с использованием идентификатора продукта, например, так: /admin/products/#productid#/metafields.json
Итак, я получил все идентификаторы продуктов и запустил их. a 'for in l oop' и звонил по одному за раз. Проблема в том, что я сталкиваюсь с «ошибкой 429», потому что в итоге я делаю более 2 запросов в секунду. Есть ли способ обойти это, как с какой-то системой очередей?
let products = []
let requestOne = `/admin/products.json?page=1&limit=250`
let requestTwo = `/admin/products.json?page=2&limit=250`
let requestThree = `/admin/products.json?page=3&limit=250`
// let allProducts will return an array with all products
let allProducts
let allMetaFields = []
let merge
$(document).ready(function () {
axios
.all([
axios.get(`${requestOne}`),
axios.get(`${requestTwo}`),
axios.get(`${requestThree}`),
])
.then(
axios.spread((firstResponse, secondResponse, thirdResponse) => {
products.push(
firstResponse.data.products,
secondResponse.data.products,
thirdResponse.data.products
)
})
)
.then(() => {
// all 3 responses into one array
allProducts = [].concat.apply([], products)
})
.then(function () {
for (const element in allProducts) {
axios
.get(
`/admin/products/${allProducts[element].id}/metafields.json`
)
.then(function (response) {
let metafieldsResponse = response.data.metafields
allMetaFields.push(metafieldsResponse)
})
}
})
.then(function () {
console.log("allProducts: " + allProducts)
console.log("allProducts: " + allMetaFields)
})
.catch((error) => console.log(error))
})