最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Node.js如何在错误回调时重新启动Async.Series

运维笔记admin9浏览0评论

Node.js如何在错误回调时重新启动Async.Series

Node.js如何在错误回调时重新启动Async.Series

我在我的应用程序中使用Async utility module。我有个问题。当“get_data”阶段返回错误时,如何重新启动async.series?

function get() {
    console.log('App start');
    async.series([
        open_db,
        get_data,
        close_db
    ], function (err) {
        console.log('App down');
    })
};

function open_db(callback) {
    mongoose.connect('mongodb://localhost/app', function (err) {
        if (err) throw err;
        console.log('App connect to DB');
        callback();
    });
};


function get_data(callback) {
    if (err) {
        console.log('Error')
        callback();
    } else {
       console.log('Ok');
       callback();
    }
};


function close_db(callback) {
    mongoose.disconnect(function() {
        console.log('App disconnect from DB');
        callback();
    });
};

在“get_data”阶段,我使用websockets.subscribe操作,并将数据从另一台服务器保存到DB。当websocket连接断开时,我需要以一定的时间间隔重试与服务器的连接

回答如下:
function query_data() {
    async.series([
        open_db,
        get_data,
        close_db
    ], function (err) {
        if (err)
            ...
    })
};

function open_db(callback, attempt_no) {
    mongoose.connect('mongodb://localhost/app', function(err) {
        if (!err)
            return callback();

        attemp_no = !attempt_no ? 1 : attempt_no + 1;

        if (attempt_no > 5)
            return callback(new Error('Maximum number of attempts exceeded'));

        setTimeout(() => open_db(callback, attempt_no), 500);
    });
};

function get_data(callback) {
    if (err) 
        return callback(err);

    // do-smth-with-data and call callback
};

function close_db(callback) {
    mongoose.disconnect(callback);
};
发布评论

评论列表(0)

  1. 暂无评论