私はforループを使用して、配列の要素に対して反復処理を行い、forループ内の異なるパラメータで同じ関数を呼び出します。ここに私のコードです:forループの各反復を待って、nodeJSのAPIレスポンスとして応答を返す方法
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}]。シームレスに実行され、すべてを完了する前に空のオブジェクトまたは1つのオブジェクトのみを返します。それを解決する方法。
node-async-loopを使用しました。しかし、それは次を使用し、私はそのパッケージを使用している間私のパラメータを送信することができません。助けてください
"aync"パッケージを確認してください。これは、ループを同期して実行する多くの機能を備えています。 –
あなたはどのノードのjsバージョンを使用していますか? –
私はノード8.4.0を使用しています –