2017-07-15 158 views
2

我想在完成命令後終止進程(或退出它們)。我有這個代碼,但進程立即退出。在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,因爲我想寫輸出到文件。我不知道其他方法。

+1

只是刪除過程。退出()行,它應該在兩個調用完成後自動退出。此外,您可以使用fs自動寫入文件而不是記錄到控制檯(取決於項目範圍和可重用性要求) – JonLuca

+0

由於'process.exit()'語句導致您的進程退出。只要刪除它,當所有待處理的呼叫完成後,您的過程就會結束。 –

+0

@JonLuca我不知道如何使用寫入而不是登錄到控制檯 –

回答

0

您可以使用Promise.all

它返回時解決所有的迭代參數的承諾已經解決或在迭代參數包含任何承諾一個承諾。它拒絕了拒絕的第一個承諾的原因。

回調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限制的條目數返回用於測試目的

+0

感謝您的幫助@taha!它的作品,但我能做什麼,當我有p1 ... p36變量? –

+0

@ J.Doe:只接受p1..p5 –

+0

:您很有可能觸及Google Play的限制。 https://github.com/facundoolano/google-play-scraper#throttling – taha

0

Javascript本質上是高度異步的,這意味着在調用第一個函數調用後,它會立即移動到下一個語句。在你的情況下,有兩種可能的方式:

  1. 要麼將​​下一行執行放在第一個的then()中,並將exit()放入第二個調用的then()塊中。
  2. 使用異步https://caolan.github.io/async/
  3. 或者乾脆刪除exit();
+0

該過程「掛起在空氣中「當我刪除process.exit() –

+0

在這種情況下,1或2應該工作。我將使用第二個 –

相關問題