我知道在StackOverflow上有更多这样的问题,但我读了其中的一些,它们都很具体,我答不出来。因此,我很抱歉提前发布了一个“副本”,但我真的需要帮助。
我编写了这个程序来将数据从JSON文件上传到for,但是当我像这样运行它时,它会崩溃,因为异步代码跟不上我的WooCommerce循环。我如何自动化这一点,或使for循环同步?这是可能的吗?或者是另一种方式?我说的这个循环就是最后的那个,uploadAllProducts。
代码如下:
// Import required modules
let fs = require("fs");
const WooCommerceRestApi = require("@woocommerce/woocommerce-rest-api").default;
// Connect to WooCommerce's API
const WooCommerce = new WooCommerceRestApi({
url: '====================',
consumerKey: "===================",
consumerSecret: "=====================",
version: 'wc/v3'
});
async function uploadProducts(page) {
// Choose a JSON file to import
let productsJSON = await JSON.parse(fs.readFileSync(`products${page}.json`));
console.log(`Imported page ${page}`);
// Iterate over all the products
productsJSON.forEach(async function(product) {
// If product is found
if (product) {
async function getCategory(a) {
switch (a) {
case "film":
return 202;
break;
case "cd vinyl":
return 163;
break;
case "boeken":
return 133;
break;
case "audiovideo":
return 125;
break;
case "baby":
return 130;
break;
case "computer":
return 190;
break;
case "kleding":
return 205;
break;
case "muziek":
return 208;
break;
case "verzamelen":
return 211;
break;
default:
return 15;
}
}
let cat = await getCategory(product.category);
async function getsubCategory(b) {
switch (b) {
case "dvd films":
return 203;
break;
case "geschiedenis":
return 138;
break;
case "religie":
return 140;
break;
case "thrillers":
return 141;
break;
case "flora fauna":
return 143;
break;
case "detectives":
return 144;
break;
case "dance house":
return 180;
break;
case "software spellen":
return 191;
break;
case "nintendo ds":
return 192;
break;
case "sony playstation":
return 193;
break;
case "nintendo wii":
return 198;
break;
default:
return 213;
}
}
let subcat = await getsubCategory(product.subcategory);
// Assign productinformation to WooCommerce product
const data = await {
name: product.title,
type: "simple",
regular_price: product.price.toString(),
description: "",
short_description: product.descr,
categories: [{
id: cat
},
{
id: subcat
}
],
images: [{
src: product.imgUrl
}]
};
console.log("Assigned all product information");
// Add product to WooCommerce
WooCommerce.post("products", data)
.then((response) => {
console.log("Product uploaded");
})
.catch((error) => {
console.log(error.response.data);
});
}
});
}
uploadAllProducts(firstPage, lastPage) {
for (let i = firstPage; i < lastPage + 1; i++) {
uploadProducts(i);
}
}发布于 2019-12-04 04:21:25
如果你想让for循环同步,你可以这样做:
async function uploadAllProducts(firstPage, lastPage) {
for (let i = firstPage; i < lastPage + 1; i++) {
await uploadProducts(i);
}
}
uploadAllProducts()您可能还想更改WooCommerce.post部分,以便像这样使用await,这样就可以正确地等待(在异步函数中不需要使用promises )
let response = await WooCommerce.post("products", data);
console.log("Product uploaded");https://stackoverflow.com/questions/59164711
复制相似问题