複数のオブジェクトは、オブジェクトの配列に変換します

phenomMAster:

私は私がオブジェクトを引数として渡されている機能を作成し、そこに一つ一つに渡される複数のオブジェクトがあり、出力が対象ですが、それは私がそれにコードを書かれているので、大丈夫です、個々のオブジェクトとして提供されますそれはここにすべてのオブジェクトのobjects.and店舗の配列は、単一のオブジェクトの例を示します試したコードですなるような方法は、今私は配列にオブジェクトを格納したかったです

const {db} = require('./constant')
const momentTz = require("moment-timezone");
const { getAuth } = require("./constant");
const officeStatus = async officeActivity => {
  let output = {};
  const maileventQuerySnapshot = await db
    .collection("MailEvents")
    .where("office", "==", officeActivity.office)
    .where("event", "==", "delivered")
    .limit(1).get();
  output["office"] = officeActivity.office;
  output["First Contact"] = officeActivity.attachment["First Contact"].value;
  output["Second Contact"] = officeActivity.attachment["Second Contact"].value;
  output["Office Creation Date"] = momentTz
    .tz(officeActivity.timestamp, officeActivity.attachment.Timezone.value)
    .format("DD MMM YYYY");
  output["Reports Sent"] = maileventQuerySnapshot.docs.length ? true:false
  const officeSubcollectionSnapshot = await db
    .collection(`Offices/${officeActivity.officeId}/Addendum`)
    .where("date","==",parseInt( momentTz(new Date()).subtract(1, "days").format("DD")))
    .where('month', '==', parseInt( momentTz(new Date()).subtract(1, 'days').format("MM"))-1)
    .where('year', '==',parseInt( momentTz(new Date()).subtract(1, "days").format("YYYY")))
     .orderBy("user").orderBy('timestamp')
    .get();
    output['Number of unique Checkin Yesterday'] =
    officeSubcollectionSnapshot.docs.length;

  const activitiesRefSnapshot = await db
    .collection("Activities")
    .where("office", "==", officeActivity.office)
    .where("template", "==", "subscription")
    .where("attachment.Template.value", "==", "check-in")
    .get();
  const phoneNumberArray = [];
  activitiesRefSnapshot.forEach(doc => {
    phoneNumberArray.push(doc.data().attachment["Phone Number"].value);
  });
  const userRecord = await Promise.all(phoneNumberArray.map(getAuth));
  output["Number of checkin Subscription Auth"] = userRecord.filter(
    doc => doc !== undefined
  ).length;
  output["Number of Checkin Subscription No Auth"] = userRecord.filter(
    doc => doc === undefined
  ).length;
  return { output};
};
module.exports = { officeStatus };

そして私は、引数として渡されたオフィスやオブジェクトを照会している他のファイル

 const {admin,db} = require('./constant');
const { officeStatus } = require("./officeStatus");
let execute = async () => {
  try {
    let office = await db.collection("Offices").where("status", "==", "PENDING").get();
    office.forEach(doc => {
      officeStatus(doc.data())
        .then(e => {
            console.log(JSON.stringify(e.output));
        })
        .catch(error => {
          console.log(error);
        });
    });
    return;
  } catch (error) {
    console.log(error);
  }
  return;
};
execute();
 admin.apps[0].delete();


I have get output in this way 
{}
{}
{}....
and I wanted the output in this way 
[{},{},{}]
アシシュモディ:

約束の内部はforEach正しくありません。それはあなたの期待される結果が得られないでしょう。それがサポートされていないとして、あなたはそれを使用しないでください。あなたは使用することを検討すべきですfor..ofPromise.allあなたのケースでは私が使用することをお勧めしPromise.allますが、配列になる必要がよいます。

Promise.all(office.docs.map(doc => {
  return officeStatus(doc.data())
    .then(e => {

      return e.output;
    })
    .catch(error => {
      console.log(error);
    });
}))
.then(res => console.log(res));

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=30908&siteId=1