我正在从产品Feed中导入产品。一个产品有一个设计师和一个类别,我把它们分成了几个表(Parse classes)。
现在的问题是我需要检查一个类别或设计师是否已经存在,所以我不需要创建它。
目前我没有检查它,导致我的数据库中有很多重复项。如果我签入了DB,它将是异步的但我实际上需要它以某种方式顺序(序列化)..任何想法?
for (var i=1;i<productsFromFeed.length;i++){
productId = parseInt(productsFromFeed[i][1]);
if (productId > lastProduct.get("productId")){
console.log("Product is new: " + productId);
var Designer = Parse.Object.extend("Designer");
var Product = Parse.Object.extend("Product");
var Category = Parse.Object.extend("Category");
var designer = new Designer();
designer.set("name", productsFromFeed[i][4]);
designer.set("designerId", parseInt(productsFromFeed[i][5]));
var category = new Category();
category.set("name", productsFromFeed[i][6]);
category.set("categoryId", parseInt(productsFromFeed[i][7]));
var newProduct = new Product();
newProduct.set("productName", productsFromFeed[i][0]);
newProduct.set("productId", parseInt(productsFromFeed[i][1]));
newProduct.set("designer", designer);
newProduct.set("category", category);
objects.push(newProduct);
} else {
console.log("Product already exists: " + productId);
}
}
答案 0 :(得分:0)
它不需要是连续的,你只需要处理你想要做的事情的异步性 - 使用promises。
您可以运行查询以提前查找所有内容并在本地缓存它们,这仅在您进行批量导入时才有用,您的代码看起来像是一个小批量导入,但目前尚不清楚这是否是一个有效的方法。
在您的情况下,只需运行您的查询并使用promises将每个逻辑阶段链接在一起。请注意,对于循环,您可以将生成的promises放入一个数组中,并等待它们全部完成。