【问题标题】:How to Check if script is finished on node.js如何检查 node.js 上的脚本是否完成
【发布时间】:2014-01-26 19:22:19
【问题描述】:

我正在编写将数据从 mysql 导入到 mongodb 我是 node.js 和 mongoDb 的新手,我的问题是如何检查是否插入了所有内容以退出脚本?它做出了它的贡献,但我不知道确定工作已经完成。

var c = require('./config').development;
var mysql = require('mysql');
var mySqlConnection = mysql.createConnection({
    host : c.mysqlHost,
    port : c.mysqlPort,
    database : c.mysqlDatabase,
    user : c.mysqlUser,
    password : c.mysqlPassword
});
var MongoClient = require('mongodb').MongoClient
, format = require('util').format;




var values = new Array("0", "100000", "200000", "300000", "400000");



MongoClient.connect('mongodb://127.0.0.1:27017/amazon', function(err, db) {

mySqlConnection.connect(function(err) {
            if (err !== null) {
                console.log(err);
            }

            values.forEach(function(limit) {
                        var sql = "SELECT id, ISO2, title, json_response FROM  amazon_product WHERE id>"+limit+" LIMIT 100000";
                        mySqlConnection.query(sql, function(err, rows) {
                            rows.forEach(function(row) {
                                try {

                                    db.collection('amazon' , function(err, col){
                                        var obj = JSON.parse(row.json_response);
                                        obj.iso2 = row.ISO2;
                                        obj.mysqlId = row.id;
                                        //How can I check that everything's is inserted?
                                        col.insert(obj, function(){});

                                    });


                                } catch (e) {
                                    console.log('problem @id ' + row.id +' ' + e);

                                }

                            });
                        });
                        console.log("I'm on limit"+ limit);
                    });

        });

});

【问题讨论】:

    标签: javascript node.js command-line


    【解决方案1】:

    让我们考虑这一行: col.insert(obj, function(){});

    当方法完成时,调用第二个参数函数(回调)。

    背景: 节点约定 - 任何回调函数都应该有第一个参数 - 错误对象。 insert 函数也是如此

    col.insert(obj, function(err){
         if (err) console.log('Error happend');
         else console.log('every thing is fine');
    });
    

    【讨论】:

    • 是的。如果将 1 个对象插入到 MongoDb 但我插入了大约 300k 个对象,则会调用此方法。
    • 函数每次调用都会调用一次,如果有300k客户端访问这段代码,会被调用300k次。
    • 为了将对象插入到 mongodb 中,您可以调用 insert。所以如果你调用它N次,它会打印N次,结果它插入N个对象,或者我不明白你?
    • 是的,我愿意。但我的问题是如何检查是否所有对象都被插入。
    • 如果控制台中根本没有字符串“发生错误”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2017-11-13
    相关资源
    最近更新 更多