【发布时间】:2018-02-27 20:42:40
【问题描述】:
我正在使用 for 循环遍历元素数组并在 for 循环内调用具有不同参数的相同函数。这是我的代码:
exports.listTopSongs = function(query) {
return new Promise(function(resolve, reject) {
var str = query.split(","), category,
for(var i=0; i<str.length; i++) {
sampleFn(str[i], 'sample', resolve, reject);
}
});
};
function sampleFn(lang, cat, resolve, reject) {
client.on("error", function (err) {
console.log(err);
var err = new Error('Exception in redis client connection')
reject(err);
});
client.keys(lang, function (err, keys){
if (err) return console.log(err);
if(keys.length != 0) {
client.hgetall(keys, function (error, value) {
var objects = Object.keys(value);
result['title'] = lang;
result[cat] = [];
var x =0;
for(x; x<objects.length; x++) {
var val = objects[x];
User.findAll({attributes: ['X', 'Y', 'Z'],
where: {
A: val
}
}).then(data => {
if(data != null) {
//some actions with data and stored it seperately in a Json array
if(result[cat].length == objects.length) {
resolve(result);
}
} else {
console.log(""+cat+" is not avilable for this value "+data.dataValues['X']);
}
});
}
});
});
}
这里它不会等待第一次迭代完成。它只是在完成第一次迭代功能之前异步运行。我需要将结果作为结果返回:[{ 1, 2}, {3,4}]。但它无缝运行并在完成所有操作之前返回空对象或仅返回一个对象。如何解决。
我使用了节点异步循环。但它使用下一个,我无法在使用该包时发送我的参数。请帮帮我
【问题讨论】:
-
检查“aync”包。它有许多使 for 循环同步运行的功能。
-
你使用的是哪个node js版本?
-
我使用的是节点 8.4.0
-
好的,@ShubhamJain 会尽力让你知道
标签: javascript node.js asynchronous nodes node-modules