使用MySQL,Node.js,Knex,Promise。
首次使用Promise,Knex和Node。由于Promise和异步调用,我无法完成给定的任务我不熟悉它们。
这个想法如下 - 有两个表(products
和parts
)。使用一些批量插入将数据迁移到那里。中间的表" products_parts
",它没有填充,我需要创建节点js代码来填写此表。当数据被填入时,在未来我们仍然需要为某些单独的产品调用此函数。
这是算法:
product.description
并将其分成几部分(用逗号分隔)。例如,如果description = "A1, B1, C1"
那么我们将有三个部分 - A1
,B1
和C1
,并且需要处理每个部分。 使用产品部分进行下一步(称之为PART
) - 这是现在用FOR循环编写的,但可能应该以某种方式被Promise取代。
尝试在数据库中找到PART
" parts
"表。
product_parts
"。 我是这样开始的:
knex("products")
.select("id", "description")
.map(function (row) {
// do staff with products.descriptin, simplified version:
var descriptionSplitByCommas = desc.split(",");
// do staff with each description PART here
// This for is not async and I believe is a bad idea, but how?!
for (var k = 0; k < descriptionSplitByCommas.length; k++) {
// STEP 3-4 should be here
// normalisation includes some string functions to be called
d = get_normalised_description(descriptionSplitByCommas[k]);
knex("PARTS")
.where("name", "=", d)
.first()
.then(function (row) {
if (row != undefined) { //not found
// do knex insert into "product_parts" table
} else {
// do knex insert into "PARTS" table
// do knex insert into "PRODUCT_PARTS" table
}
})
}
})
答案 0 :(得分:0)
也许以下内容可行,但由于代码不起作用,因此我无法确定:
knex("products")
.select("id", "description")
.map(function (row) {
return Promise.all(
desc.split(",")
.map(get_normalised_description)
.map(
descripion=>
knex("PARTS")
.where("name", "=", descripion)
.first()
.then(function (row) {
return Promise.all([
//insert into product_parts table,
//(row!==undefined)
// ? undefined
// : insert into parts table
])
})
)
)
})