提问者:小点点

退出当前线程并移到下一个线程


我有两组命令要依次运行,第一个是数据库种子,第二个是实际的服务器启动,但是由于某种原因,nodejs没有运行第二个命令,让我给您展示一下脚本

package.json

 "scripts": {
    "start": "ts-node src/seeder/seedCompanies  && ts-node-dev --respawn src/index.ts"
  }

第一个命令是种子,它的代码是

SeedCompanies.ts

import { Company } from "../entity/Company";
import { Product } from "../entity/Product";
import { ProductColor } from "../entity/ProductColor";
import { ProductSize } from "../entity/ProductSize";

import { createConnection } from "typeorm";
import bcrypt from "bcryptjs";

createConnection().then((connection): Promise<void> => {

  for (let i = 0; i <= 1; i++) {

    let company = new Company();
    company.name = `Company ${Math.random().toString(36).substring(4)}`,
      company.email = `email${Math.random().toString(36).substring(4)}@gmail.com`,
      company.address = "Demo Address",
      company.password = bcrypt.hashSync('123', 10),
      company.website = "website.com"

    connection.manager
      .save(company)
      .then(company => {


        for (let j = 0; j < 10; j++) {
          let product = new Product();
          //randon name for product as seeder will run on every server start
          product.name = `Product ${Math.random().toString(36).substring(5)}`;
          product.description = "Seed product";
          product.image = "https://picsum.photos/200/300";
          product.company = <any>company.id;
          connection.manager
            .save(product).then(product => {
              let productColor = new ProductColor();
              productColor.color = "#000";
              productColor.product = <any>product.id


              connection.manager
                .save(productColor)

              let productSize = new ProductSize();
              productSize.size = "XL";
              productSize.product = <any>product.id

              connection.manager
                .save(productSize)
            })

        }
      });
  }
  return <any>null;
})

现在种子工作得很好,我可以看到添加的数据,但问题是nodejs卡在这个脚本的末尾,没有显示任何错误

query: SELECT `ProductSize`.`id` AS `ProductSize_id`, `ProductSize`.`size` AS `ProductSize_size` FROM `product_size` `ProductSize` WHERE `ProductSize`.`id` = ? -- PARAMETERS: [60]
query: COMMIT
query: COMMIT
query: COMMIT

这是我尝试使用的终端中的最后几行

process.exit(1)

但是这会关闭服务器,我如何才能转到package.json中的下一个线程/命令呢?


共1个答案

匿名用户

NPM脚本显示:

...: "ts-node src/seeder/seedCompanies  && ts-node-dev --respawn ..."

其中的指示“只有在前一个命令成功退出时才运行下一个命令”。要在节点进程中执行此操作,可以使用而不是调用。有关退出代码的详细信息,请参阅此处。

您需要在脚本中指定植入成功或失败的时间。类似于:

createConnection()
.then((connection): Promise<any> => {
  // Use the connection, waiting for it to finish
  // See below for comments!
}).then(() => {
  // Seeding successful
  return process.exit(0);
})
.catch((err): Promise<any> => {
    // Seeding Failed
    return process.exit(1);
});

注意,在您的示例代码中,您并没有等待循环中的promise链完成。您需要适当地这样做,以确保数据在退出之前完成种子植入。如果你需要帮助,那可能是另一个问题。

相关问题