Я немного борюсь за обработку асинхронных вызовов по запросам, как я могу получить ответ в правильном порядке.Обработка асинхронных вызовов по запросам в node.js
У меня есть массив пользователей, он имеет полезную нагрузку объектов JSON, что я хочу сделать, это вставить имя пользователя и его детали в различных таблицах, таких как сообщения электронной почты, фотографии и т.д. Ниже мой псевдо фрагмент кода
var jsonObj = {};
var jsonArray = [];
for (var i = 0; i < userArray.length; i++) {
var userJSON = userArray[i];
if (typeof userJSONJSON.list_of_emails != 'undefined') {
conn.query('insert into user_tble set ?', userJSON, function (err, ins) {
conn.query('insert into user_emails (user_id,email_address,) values ?', [globalEmailAddressArray], function (err, ins2) {
conn.query('insert into user_phones (user_id,phone_number) values ?', [globalPhoneNumberArray], function (err, ins3) {
conn.query('insert into user_pictures (user_id,pic_url) values ?', ['http://localhost:300/somepicture'], function (err, ins4) {
jsonObj["result"] = "executed1";
jsonArray.push(jsonObj);
res.status(200).json(arr: jsonArray)
})
})
})
});
} else if (typeof userJSONJSON.list_of_phones != 'undefined') {
conn.query('insert into user_phones (user_id,phone_number) values ?', [globalPhoneNumberArray], function (err, ins3) {
conn.query('insert into user_pictures (user_id,pic_url) values ?', ['http://localhost:300/somepicture'], function (err, ins4) {
jsonObj["result"] = "executed2";
jsonArray.push(jsonObj);
res.status(200).json(arr: jsonArray)
})
})
}
}
если я дать полезную нагрузку что-то вроде
{
"pay_load":[
{
"list_of_emails": [
{"email":"[email protected]"}
],
"last_name": "",
"first_name": "User1"
},
{
"list_of_email_addresses": [
{"email":"[email protected]"}
],
"last_name": "",
"first_name": "User2"
},
{
"list_of_email_addresses": [],
"last_name": "",
"first_name": "User3"
}
]
}
Если я выполняю код JSon он возвращает , например, он возвращает мне выход
{
arr:[
{
result : "executed2"
}
]
}
Я хочу что-то вроде асинхронной природы, я думаю, что он пропускает оставшиеся два.
{
arr:[
{
result : "executed1"
},
{
result : "executed1"
},
{
result : "executed2"
}
]
}
Вкратце, как я могу обрабатывать асинхронные вызовы для достижения вышеуказанного результата.
Возможный дубликат [JavaScript закрытия внутри петли - простой практический пример] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – farhan3