Массив пуст, никаких данных после для l oop не добавлено - PullRequest
0 голосов
/ 14 марта 2020

Я использую redis и nodejs впервые, но безуспешно. Попытка l oop вставить данные, но получил пустой массив.

const redis = require("redis");

const client = redis.createClient({
  retry_strategy: function(options) {
    if (options.error && options.error.code === "ECONNREFUSED") {
      // End reconnecting on a specific error and flush all commands with
      // a individual error
      return new Error("The server refused the connection");
    }
    if (options.total_retry_time > 1000 * 60 * 60) {
      // End reconnecting after a specific timeout and flush all commands
      // with a individual error
      return new Error("Retry time exhausted");
    }
    if (options.attempt > 10) {
      // End reconnecting with built in error
      return undefined;
    }
    // reconnect after
    return Math.min(options.attempt * 100, 3000);
  },
});

var data_value = {
        id: '235235',
        totalrv: 'WAIT',
        product: 'productName2',
        url: 'url2',
        process: 'proc',
        task: 'msg'
    };

client.set("key0", JSON.stringify(data_value));
client.set("key1", JSON.stringify(data_value));
client.set("key2", JSON.stringify(data_value));
client.set("key3", JSON.stringify(data_value));
client.set("key4", JSON.stringify(data_value));

//client.get("key2", redis.print);

var logger_data = {
        logger: []
    };

client.keys('*', function (err, keys) {
    if (err) return console.log(err);

    for(var i = 0, len = keys.length; i < len; i++) {
        var values_v = client.get(keys[i].toString(), function(err, val) {
            // console.log(logger_data);
            // data is exist ...
            logger_data.logger.push(JSON.parse(val));
        });
    }
});

// empty data
console.log(logger_data);

Я написал 2 результата печати данных, в l oop все работает нормально, но конец функции, данных нет массив.

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Хорошо, с помощью CertainPerformance теперь он работает в асинхронном режиме. Большое спасибо ...

async function getMessage () {
    var logger_data = {
        logger: []
    };

    return new Promise(function(resolve, reject) {
        client.keys('*', function (err, keys) {
            if (err) return console.log(err);

            for(var i = 0, len = keys.length; i < len; i++) {
                var values_v = client.get(keys[i].toString(), function(err, val) {
                    logger_data.logger.push(JSON.parse(val));
                    resolve(logger_data);
                });
            }
        });
    });
}

async function main() {
    let message = await getMessage();
    console.log(message);
}

main();
0 голосов
/ 14 марта 2020

вы можете вызвать функцию внутри обратного вызова, если вы хотите напечатать logger_data со значениями вне асинхронного обратного вызова, как это

function printLoggerData(){
 console.log(logger_data);
}

client.keys('*', function (err, keys) {
    if (err) return console.log(err);

    for(var i = 0, len = keys.length; i < len; i++) {
        var values_v = client.get(keys[i].toString(), function(err, val) {
            // console.log(logger_data);
            // data is exist ...
            logger_data.logger.push(JSON.parse(val));
            // calling the function here so that it contains the latest values
            printLoggerData(); 
       });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...