【发布时间】:2022-01-23 22:30:13
【问题描述】:
我只是在学习 javascript,我正在尝试通过 GAS 更新 woocommerce 产品。
问题如下:
我有一个变量可以解析来自 woocommerce 的响应
for (let sku of skuSearch) {
var surl = website + "/wp-json/wc/v3/products?consumer_key=" + ck + "&consumer_secret=" + cs + "&sku=" + sku;
var url = surl
Logger.log(url)
var result = UrlFetchApp.fetch(url, optionsGet);
if (result.getResponseCode() == 200) {
var wooProducts = JSON.parse(result.getContentText());
Logger.log(result.getContentText());
}
然后我有另一个 for 进行迭代,并从一个新数组中进行迭代,该数组包含 wooProducts 的 id + sku 和来自另一个变量的价格,该变量从我的工作表中获取更新的价格:
var idLength = wooProducts.length;
Logger.log(idLength);
for (var i = 0; i < idLength; i++) {
var container = [];
Logger.log(i);
container.push({
id: wooProducts[i]["id"],
sku: wooProducts[i]["sku"],
price: data[i]["price"],
});
我无法确切说明为什么它不起作用。我的意思是 for 循环有效,它在每个循环中推送 id、sku 和 price,只是 data[i] 只提供第一个 ¿object?而不是像 wooProducts 那样在每个循环中添加 +1 循环。
我将复制 3 个循环,这样就很清楚了,我不确定它是否已经清楚了。
循环 1:
[{"id":1622,"sku":"PD-1000-B","price":8145.9}]
循环 2:
[{"id":1624,"sku":"PD-1007-A","price":8145.9}]
循环 3:
[{"id":1625,"sku":"PD-1014","price":8145.9}]
您可以看到 id+sku 发生变化,但价格没有变化。
为了进一步了解,我将包含在 For 之外声明的数据变量:
const data = codigos.map(function(codigos, indice) {
return {
sku: codigos[0],
price: precios[indice][0]
}
})
//** 编辑:
我正在添加整个代码,这样可能更有意义?
function getDataloopwoo() {
var ck = 'xxx'
var cs = 'xxx'
var website = 'xxx'
var optionsGet =
{
"method": "GET",
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"muteHttpExceptions": true,
};
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PreciosBULK');
var codigos = sheet.getRange("A2:A").getValues();
var precios = sheet.getRange("B2:B").getValues();
var skuSearch = sheet.getRange("A2:A").getValues();
const data = codigos.map(function(codigos, indice) {
return {
sku: codigos[0],
price: precios[indice][0]
}
})
Logger.log(skuSearch)
for (let sku of skuSearch) {
var surl = website + "/wp-json/wc/v3/products?consumer_key=" + ck + "&consumer_secret=" + cs + "&sku=" + sku;
var url = surl
Logger.log(url)
var result = UrlFetchApp.fetch(url, optionsGet);
if (result.getResponseCode() == 200) {
var wooProducts = JSON.parse(result.getContentText());
Logger.log(result.getContentText());
}
var idLength = wooProducts.length;
Logger.log(idLength);
var container = [];
for (var i = 0; i < idLength; i++) {
Logger.log(i);
container.push({
id: wooProducts[i]["id"],
sku: wooProducts[i]["sku"],
price: data[i]["price"],
});
Logger.log(container);
var wooBatch = JSON.stringify(container);
Logger.log(wooBatch);
}
}
}
// 使用“解决”进行最终编辑:
所以我认为一次询问 1 个 sku 效率低下,所以现在我按 100 个询问,然后分页一段时间 if 并将 id、sku、价格保存到容器阵列。 我现在需要将容器数组与具有更新价格的数组进行比较,并形成一个具有 id、sku 和更新价格的新数组,我现在正在阅读。代码:
function getDataloopwoo() {
var ck = 'xx'
var cs = 'xx'
var website = 'xx'
var optionsGet =
{
"method": "GET",
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"muteHttpExceptions": true,
};
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PreciosBULK');
var codigos = sheet.getRange("A2:A").getValues();
var precios = sheet.getRange("B2:B").getValues();
const data = codigos.map(function(codigos, indice) {
return {
sku: codigos[0],
price: precios[indice][0]
}
})
var container = [];
var surl = website + "/wp-json/wc/v3/products?consumer_key=" + ck + "&consumer_secret=" + cs + "&per_page=100";
var url = surl
//Logger.log(url)
var result = UrlFetchApp.fetch(url, optionsGet);
var headers = result.getAllHeaders();
var total_pages = headers['x-wp-totalpages'];
var pages_count = 0;
while (pages_count < total_pages) {
if (result.getResponseCode() == 200) {
var wooProducts = JSON.parse(result.getContentText());
//Logger.log(result.getContentText());
}
for (var i = 0; i < wooProducts.length; i++) {
//Logger.log(i);
container.push({
id: wooProducts[i]["id"],
sku: wooProducts[i]["sku"],
price: wooProducts[i]["price"],
});
Logger.log(container);
}
pages_count++;
if (pages_count < total_pages){
var surl = website + "/wp-json/wc/v3/products?consumer_key=" + ck + "&consumer_secret=" + cs + "&per_page=100" + "&page=" + (pages_count + 1);
var url = surl
var result = UrlFetchApp.fetch(url, optionsGet);
Logger.log(url);
}
}
}
【问题讨论】:
-
变量
skuSearch是什么样的?尝试记录它。另外,请注意for ... in和for ... of之间的区别。见this。 -
skuSearch 是一个仅检索 SKU 的简单对象。日志:[[PD-1000-B]、[PD-1007-A]、[PD-1014]、[PD-1026]]
-
the for of works as inteded(我认为),想法是循环 skuSearch 的值,以便将 sku 添加到 url。
标签: javascript arrays wordpress google-apps-script woocommerce