数组为空,for循环后未添加数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组为空,for循环后未添加数据相关的知识,希望对你有一定的参考价值。
我第一次使用redis和nodejs,但没有成功。尝试循环插入数据,但得到一个空数组。
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个打印数据结果,在循环中可以正常工作,但是函数结束了,数组中没有数据。
答案
如果要使用异步回调外部的值来打印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();
);
);
另一答案
好的,在SomePerformance的帮助下,它现在可以异步工作。非常感谢您...
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();
以上是关于数组为空,for循环后未添加数据的主要内容,如果未能解决你的问题,请参考以下文章