Использовать асинхронный цикл forEach при получении данных из магазина - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть данные о пожарном депо примерно так:

"Support": { "userid":"abcdxyz", "message": "hello" }

Я использую nodejs для извлечения своих данных, а также хочу показать адрес электронной почты и имя человека, отправившего это сообщение. Поэтому я использую следующую функцию:

database.collection("support").get().then(async function (collections) {
var data = [];
console.log("data collected");
collections.forEach(async function (collection) {
    var temp = {};
    var collectionData = collection.data()
    var userInfo = await getUserDetails(collectionData.userId)
    temp.name = userInfo.name
    temp.supportMessage = collectionData.supportMessage
    data.push(temp)
    console.log("data pushed")
});
    console.log("data posted")
    return res.status(200).end(JSON.stringify({ status: 200, message: "Support Message fetched successfully.", data: data }))
}).catch(error => {
    return res.status(500).end(JSON.stringify({ status: 500, message: "Error: " + error }))
});

Здесь последовательность журналов следующая: данные собраны, данные опубликованы, данные переданы

Я хочу следующую последовательность: собранные данные, отправленные данные (x раз), отправленные данные

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Я решил свой ответ с помощью комментария @estus.

Кредит: @ estus

var data = [];
var tempCollection = [];
collections.forEach(collection => {
    tempCollection.push(collection.data());
});
for (collection of tempCollection) {
    var temp = {};
    var userInfo = await getUserDetails(collection.userId)
    temp.name = userInfo.name
    temp.supportMessage = collection.supportMessage
    data.push(temp)
}

Это очень легко решило мою проблему.

0 голосов
/ 07 ноября 2018

Используйте следующий код:

database.collection("support").get().then(async function (collections) {
var data = [];
console.log("data collected");

for await(let collection of collections){
  var temp = {};
  var collectionData = collection.data()
  var userInfo = await getUserDetails(collectionData.userId)
  temp.name = userInfo.name
  temp.supportMessage = collectionData.supportMessage
  data.push(temp)
  console.log("data pushed")
}

console.log("data posted")
return res.status(200).end(JSON.stringify({ status: 200, message: "Support Message fetched successfully.", data: data }))
}).catch(error => {
  return res.status(500).end(JSON.stringify({ status: 500, message: "Error: " + error }))
});

ИЛИ

Использование можно использовать

var promise = Promise.all(collections.map((collection) =>{
   ...
   return await ... //or a promise
}));

promise.then(() => {
  console.log("posted");
  return res.status(200).end(...);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...