关于数组:如何在javascript中退出回调循环

How to exit callback loop in javascript

我在test.js文件中有一个简单的代码片段:

1
2
3
  [1, 2, 3, 4].forEach(function(e) {
        console.log(e);
    });

每当我在终端中运行node test.js,我就会得到输出

1
2
3
4
5
    1
    2
    3
    4
    |

但这个计划从来没有真正退出过。我被要求手动结束它。这看起来很琐碎,但我无法找到一个合适的方法退出终端的便签。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
UPDATE 1:

var mongoose = require('mongoose');

var User = require('../models/users/user');
var UserProfile = require('../models/users/profile');

var config = require('../config');
var logger = require('../libraries/logger');
logger = logger.createLogger(config);

var connectionString = config.database.adapter + '://' + config.database.host + ':' + config.database.port + '/' + config.database.name;
mongoose.connect(connectionString, {server: {auto_reconnect: true }});

User.find(function(error, users) {
    users.forEach(function(user) {
    var data = {
        email: user.local.email || user.google.email || user.facebook.email || ''
    };
    UserProfile.update({user_id: user._id}, {$set: data}, function (error, record) {
        if (error) {
            logger.error(error);
        } else {
            logger.info(data);
        }
    });
});

上面是我正在努力工作的代码。即使不处理脚本,添加process.exit()也会退出进程。有什么解决方案吗?

1
UPDATE 2:

我想出了解决办法。在上面的情况下,脚本没有退出,因为到MongoDB数据库的连接没有关闭。

在处理完成后,我使用了一个脏的hack来关闭连接,方法是在行的末尾添加setTimeout(function() { mongoose.connection.close(); }, 60 * 1000);


如果这是一个nodejs问题,那么您可以使用process.exit()退出,这样您就可以将其添加到最后运行的任何函数的末尾。在您的案例中,您将首先关闭Mongoose,然后将process.exit()作为退出Mongoose的成功处理程序。