在node.js中执行命令后终止进程

时间:2017-07-15 19:13:29

标签: javascript node.js

我希望在命令完成后终止进程(或退出它们)。我有这个代码,但进程立即退出。

var gplay = require('google-play-scraper');

gplay.list({
    category: gplay.category.GAME_ACTION,
    collection: gplay.collection.TOP_FREE,
    start: 0,
    num: 120
  })
  .then(console.log, console.log);

gplay.list({
    category: gplay.category.GAME_ACTION,
    collection: gplay.collection.TOP_FREE,
    start: 120,
    num: 120
  })
  .then(console.log, console.log);
process.exit();

我通过node script.js > output.txt运行它,因为我想将输出写入文件。我不知道其他方法。

2 个答案:

答案 0 :(得分:0)

Javascript本质上是高度异步的,这意味着在调用第一个函数调用之后,它将立即移动到下一个语句。在您的情况下,有两种可能的方式:

  1. 将下一行执行放在第一行的then()中,并将exit()放入第二次调用的then()块中。
  2. 使用async https://caolan.github.io/async/
  3. 或者只需删除exit();

答案 1 :(得分:0)

您可以使用Promise.all

  

它返回一个Promise,它在iterable参数中的所有promise都已解析或者iterable参数不包含promise时解析。它拒绝承认拒绝的第一个承诺。

回调displayThenExit将显示结果,然后退出节点进程

var gplay = require('google-play-scraper');

var p1 = gplay.list({
    category: gplay.category.GAME_ACTION,
    collection: gplay.collection.TOP_FREE,
    start: 0,
    num: 2
  })  

var p2 = gplay.list({
    category: gplay.category.GAME_ACTION,
    collection: gplay.collection.TOP_FREE,
    start: 2,
    num: 2
  })  
var displayThenExit = function(result){
    console.log(result);
    process.exit(0);
}

Promise.all([p1, p2]).then(displayThenExit, console.log);

ps:我设置num: 2以限制为测试目的而返回的条目数