node和knex-populating之间的表承诺问题

gfttwv5a  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(466)

使用mysql,node.js,knex,promise。
第一次与promise、knex和node合作。我不能完成给定的任务,因为承诺和异步调用我不习惯它们。
这个想法是这样的——有两张table( products 以及 parts ). 数据是使用一些批量插入迁移到那里的。“中间有一张table” products_parts ,它没有被填充,我需要创建节点js代码来填充这个表。当需要填写数据时,我们有时仍需要为一些单独的产品调用此函数。
算法如下:
查询产品
对于每个被查询的产品-获取 product.description 把它分成几个部分(用逗号分开)。例如,如果 description = "A1, B1, C1" 然后我们会有三个部分- A1 , B1 以及 C1 需要处理每一个。
对产品部分执行下一步(称之为 PART )-这是写在for循环现在,但可能应该以某种方式取代承诺的东西。
试着找到 PART “在数据库中” parts “table。
如果找到,则插入db“ 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 
                }
          })
        }
    })
kmynzznz

kmynzznz1#

也许下面的代码可以工作,但由于代码不工作是在您的意见,我不能肯定:

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
              ])
            })
        )
      )
    })

相关问题