脚本不会自行停止

时间:2019-11-28 20:14:20

标签: javascript node.js github github-actions

我有两个脚本,我们称它们为“第一个”和“第二个”。

我对“第一个”脚本没有任何疑问,下面是它的外观:

  const fetch = require('node-fetch');

  console.log(typeof fetch); // prints: function

  fetch(URLHERE)
    .then(res => res.json())
    .then(res => {

      console.log(res);

    });

这是一个“第二”脚本,运行后不会停止运行

  const APIWRAPPER = require('APIWRAPPER');
  const api = new APIWRAPPER(TOKEN);

  console.log(typeof api); // prints: object

  api.find(QUERY)
    .then(json => {

      console.log(json);

    });

两个脚本都输出相同的内容。

但是当我运行“第二”脚本时,它不会停止。我必须在赢终端中按Ctrl + C。

您可能会问,偶尔按Ctrl + C对我来说有这么大的问题吗?不,不是,但是我试图用GitHub Action触发此脚本,并且它不断运行,给我一个选择:取消它。

P.S。我正在使用node run firstnode run second来触发这些脚本。

package.json:

{
  ...
  "scripts": {
    "first": "node ./scripts/first.js",
    "second": "node ./scripts/second.js"
  },
}

我尝试过的事情:

  const APIWRAPPER = require('APIWRAPPER');
  const api = new APIWRAPPER(TOKEN);

  console.log(typeof api); // prints: object

  api.find(QUERY)
    .then(json => {

      console.log(json);

      process.exit(0); // Adding this

    });

但是我不确定这是否是好习惯,这只是我发现的第一件事。

2 个答案:

答案 0 :(得分:0)

我不太了解您的脚本,但是我知道您可以通过默认情况下设置特定的超时时间来自动取消管道:

job.<id>.timeout-minutes设置整个作业的超时时间

job.<id>.steps.timeout-minutes为单个步骤设置超时

您的情况:

my-job:
 runs-on:  ubuntu-latest
 timeout-minutes: 30

答案 1 :(得分:0)

如果脚本没有停止,则意味着您的APIWRAPPER仍在执行某些操作,例如打开与api的连接(Websocket,令牌刷新逻辑等)。

因此,您应该查看APIWRAPPER是否具有某种stop / shutdown机制。

编辑:

process.exit(0);应该避免,因为您可能会在操作过程中杀死“某些东西”。