まず、私はnodejsを初めて使用しています。私は各ループの中で複数のクエリを実行する必要があるAPIの作業。ですから、私はexpressでasyncモジュールを使い始めました。あなたは、私が非同期モジュールを使用してオブジェクトを移入しようとしています見ることができるように、私が使用しています正確なコードはnodejs非同期の並列非同期内部
new_or_updated = {};
async.each(rows, function(e, callbackParent) {
new_or_updated.id = e.id;
async.parallel([
function(callback){
db.query("SELECT sender_string FROM filter_positive_rules_sender WHERE rule_id = ? AND is_deleted = 0", e.id,function(err, rows, fields){
if (err) {
return callback(err);
}
new_or_updated.sender = rows.map(x => x.sender_string);
callback(null);
});
},
function(callback){
db.query("SELECT subject_string FROM filter_positive_rules_subject WHERE rule_id = ? AND is_deleted = 0", e.id ,function(err, rows, fields){
if (err) {
return callback(err);
}
new_or_updated.subject = rows.map(x => x.subject_string);
callback(null);
});
},
function(callback){
db.query("SELECT body_string FROM filter_positive_rules_body WHERE rule_id = ? AND is_deleted = 0", e.id ,function(err, rows, fields){
if (err) {
return callback(err);
}
new_or_updated.body = rows.map(x => x.body_string);
callback(null);
});
}
],
function(err) {
if (err) {
res.status(500).json(
"Internal server error"
).send();
}
console.log(new_or_updated):
callbackParent(null, new_or_updated);
});
},
function(err, result) {
if (err) {
res.status(500).json(
"Internal server error"
).send();
}
console.log(result)
});
です。並列非同期でnew_or_updatedをコンソール化すると、配列が正しく構築されます。しかし、私は、各非同期コールバックに変数を送信し、それ(結果変数)をコンソール私は未定義になる。また、私がparentCallbackでnew_or_updatedをコンソール化するとき、配列内の1つの要素(各非同期モジュールを使用して最後の配列を構築する)だけを取得します。
私はここで間違っていますか?ネストされた非同期が実際に実際に動作するはずであることを誰かが私に説明できますか?
値を格納するために、グローバル変数を使用することです。非同期操作を実行する関数外の変数を初期化してみてください。 – ArUn
@ArUn new_or_updated変数は、両方の非同期の外で初期化されています。 –
あなたはそのメイン関数の外でそれを初期化できますか? – ArUn