簡體   English   中英

如何迭代 JSON 數組並從異步箭頭 function 添加數據?

[英]How to iterate a JSON array and add data from an async arrow function?

我是 MEAN 堆棧和 JS 的新手。 我想要完成的是調整我從數據庫中獲得的響應,添加另一個字段。 我有一個 mongoose 方法,它為我提供了所有存在的課程,我想將每個課程的所有銘文添加到該信息中。 所以我正在嘗試這個:

exports.getAllCourses = async(req, res) => {
    try {
        const rawCourses = await Course.find();
        const courses = await courseAdapter.apply(rawCourses)
        await res.json({courses});
    } catch (error) {
        console.log(error);
        res.status(500).send("Ocurrio un error imprevisto :/");
    } 
};

我的課程適配器

exports.apply = (courses) => {
    return courses.map(async course=> (
        {
            ...course._doc,
            number: await coursetUtils.getNumberOfInscriptions(course._doc._id)
        }
    ));
}

還有我的課程Utils:

exports.getNumberOfInscriptions = async courseId => {
       return await CourseInscription.countDocuments({courseId: courseId});
}

我認為我的問題在於async-await function 因為使用此代碼我得到了這個:

{"courses":[
  {},
  {}
]}

或改變一些東西我得到這個:

{"courses":[
  {"courseInfo":{...},
   "number":{}
  },
  {"courseInfo":{...},
   "number":{}
  }
]}

但從來沒有數過題字上的反應。 順便說一句,我在代碼的其他部分使用 function getNumberOfInscriptions()進行驗證和工作。

嘗試了很多東西我得到了這個:我改變了我在應用function 中處理來自 DB 的數據的方式,並將它視為一個數組。

exports.apply = async (courses) => {
    var response = [];
    for (let c of courses) {
        var doc = c._doc;
        var tmp = [{course: doc, inscriptionNumber: await courseUtils.getNumberOfInscriptions(c._doc._id)}];
        response = response.concat(tmp);
    }
    return response;
}

我認為這不是實現我的目標的好方法,但它確實有效。 如果我發現更好的東西,性能或清潔,我會發布。

無論如何,當我調用我的async-await function 時,我仍然不知道我之前map function 做錯了什么。 如果有人知道,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM