我有大约 650 个产品,每个产品都有很多与它相关的附加信息存储在元字段中。我需要将所有元字段信息存储在一个数组中,这样我就可以过滤某些信息并将其显示给用户。
为了获取所有元文件数据,您需要使用产品 ID 对每个产品进行一次 API 调用,如下所示:/admin/products/#productid#/metafields.json
所以我所做的是获取所有产品 ID,然后运行“for in loop”并在时间。问题是我遇到了“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))
})