如果所有进程完成,如何退出节点js脚本

我是新的节点js。 我正在使用for循环以不同的值多次启动相同的函数。 我也在使用请求从网站上抓取数据。 但是,如果我完成了我所有的脚本不会自动结束的过程。 由于许多原因,如请求连接不closures等。它是asynchronous运行,所以我不能手动closures它。 如果我使用process.exit(); 在for循环的最后一行,它在运行函数之前立即closures。 如果我的for循环完成,如何退出这个脚本? 请帮帮我。

我的工作代码是:

const request = require('request'); const cheerio = require('cheerio'); const Sequelize = require('sequelize'); var redis = require("redis"), client = redis.createClient(); var id = [20434, 21794, 21825, 21350, 20753, 20451]; const sequelize = new Sequelize('xyz', 'root', 'root', { host: 'localhost', dialect: 'mysql', pool: { max: 5, min: 0, idle: 90000, acquire: 90000 }, }); const User = sequelize.define('abcd', { 'X': { type: Sequelize.STRING }, 'Y': { type: Sequelize.STRING }, 'A': { type: Sequelize.INTEGER }, 'abc': { type: Sequelize.STRING }, 'info': { type: Sequelize.STRING }, },{ tableName: 'xyz' }); for(var x=0; x<id.length; x++){ scrapeweb(id[x], x); } function scrapeweb(id, text, done){ try { switch(text) { case 0: lang = "english"; break; case 1: lang = "hindi"; break; case 2: lang = "tamil"; break; case 3: lang = "malayalam"; break; case 4: lang = "kannada"; break; case 5: lang = "telugu"; break; default: lang = "language" break; } request("http://www*xyz*com/jfkdh/"+id+"/", function(error, response, body) { if(error) { console.log(error); var err = new Error('Exception in requesting url') throw err } //scrap the given url and get song-names ..... ..... ..... ..... for(var i=0; i<text.length; i++){ //DB section to check the song is available or not. User.findOne({attributes: ['A', 'B'], where: { B: { $like: '%'+word[i]+'%'} , X: "....." } }).then(data => { if(data != null) { //Redis section client.on("error", function (err) { console.log(err); var err = new Error('Exception in redis client connection') throw err }); if(client.hexists('word', data.dataValues['A']) == true) { client.hincrby('word', data.dataValues['A'] , 1); } else { // client.hincrby('word', 'count', 1); client.hmset('word', data.dataValues['A'], 0); client.expire('word', 86400); } console.log(data.dataValues['B']+" is available and language = "+lang); } else { console.log("word is not avilable"); } }); } }); }); } catch(err) { console.log(err); } } 

编辑您的function“scrapeweb”,以便它返回每个电话的承诺。 在调用循环时,将所有承诺存储在数组中,以便检查“Promise.all”。 在完成“Promise.all”后,你的脚本将停止,或者你可以做你想做的事情。