簡體   English   中英

屬性未定義但 console.log() 打印屬性

[英]Property undefined but the console.log() prints the property

我有這個功能:

async geraQuiz(idEstudante) {
  let idioma = new Array()
  let livrosUnidadesGerarQuiz = new Array()
  const idsClassesEstudante = await this.getIdClassesEstudante(idEstudante) // Here i have this array return: [2,3]

  for(let i=0;i<idsClassesEstudante.length;i++){
   livrosUnidadesGerarQuiz = new Array() // Clear the array
   idioma.push(await this.getDadosClasseIdiomaEstudante(idsClassesEstudante[i]))
   livrosUnidadesGerarQuiz = await this.getLivrosUnidadesGerarQuiz(idsClassesEstudante[i], idBookClasseEstudante[0], qtdQuizGerar)
   idioma[i].quiz = livrosUnidadesGerarQuiz

   console.log(JSON.stringify(idioma))

   console.log(idioma[i].quiz[0])

   ...

console.log(idioma)我有這個對象數組:

[
  {
    "id": 2,
    "code": "ING-NOT-2019",
    "description": "Inglês Noturno 2019",
    "start_date": "2019-12-30T03:00:00.000Z",
    "end_date": "2019-12-31T03:00:00.000Z",
    "period": "Noturno",
    "language": "Inglês",
    "status": false,
    "user_id": 1,
    "created_at": "2019-12-30 10:04:47",
    "updated_at": "2020-01-05 16:08:00",
    "language_substring": "US",
    "quiz": [
      {
        "id": 1,
        "class_id": 2,
        "book_unit_id": 1,
        "book_id": 1,
        "start_date": "2020-01-03T03:00:00.000Z",
        "end_date": "2020-01-15T03:00:00.000Z",
        "book_unit_sequence": 1,
        "status": false,
        "user_id": 1,
        "created_at": "2019-12-27T11:11:21.000Z",
        "updated_at": "2019-12-30T17:54:12.000Z",
        "unit": 1,
        "sequence": 1,
        "description": "UNIT_01_GRAMMAR",
        "qt_question": 5,
        "miniature": null
      },
      {
        "id": 2,
        "class_id": 2,
        "book_unit_id": 2,
        "book_id": 1,
        "start_date": "2020-01-15T03:00:00.000Z",
        "end_date": "2020-01-31T03:00:00.000Z",
        "book_unit_sequence": 2,
        "status": false,
        "user_id": 1,
        "created_at": "2019-12-27T11:11:39.000Z",
        "updated_at": "2019-12-27T11:11:39.000Z",
        "unit": 1,
        "sequence": 2,
        "description": "UNIT_01_VOCABULARY",
        "qt_question": 5,
        "miniature": null
      },
      {
        "id": 3,
        "class_id": 2,
        "book_unit_id": 3,
        "book_id": 1,
        "start_date": "2020-01-31T03:00:00.000Z",
        "end_date": null,
        "book_unit_sequence": 1,
        "status": false,
        "user_id": 1,
        "created_at": "2019-12-27T11:11:46.000Z",
        "updated_at": "2019-12-27T11:11:46.000Z",
        "unit": 2,
        "sequence": 1,
        "description": "UNIT_02_GRAMMAR",
        "qt_question": 5,
        "miniature": null
      }
    ]
  }
]

但是,當我嘗試使用以下方法訪問該屬性時: console.log(idioma[i].quiz[0]我收到undefined ,但是console.log()顯示我有這個屬性quiz並且不是undefined ,為什么會發生這種情況?

我在console.log(idioma[i].quiz[0])后面放了一個 return 以防止它不是訂閱,但我有相同的結果;

我放了一個console.log(i)並且我的值為 0

@編輯

沒有字符串化的console.log(idioma)

[
  Class {
    __setters__: [
      '$attributes',
      '$persisted',
      'primaryKeyValue',
      '$originalAttributes',
      '$relations',
      '$sideLoaded',
      '$parent',
      '$frozen',
      '$visible',
      '$hidden'
    ],
    '$attributes': {
      id: 2,
      code: 'ING-NOT-2019',
      description: 'Inglês Noturno 2019',
      start_date: 2019-12-30T03:00:00.000Z,
      end_date: 2019-12-31T03:00:00.000Z,
      period: 'Noturno',
      language: 'Inglês',
      status: false,
      user_id: 1,
      created_at: 2019-12-30T13:04:47.000Z,
      updated_at: 2020-01-05T19:08:00.000Z,
      language_substring: 'US',
      quiz: [Array]
    },
    '$persisted': true,
    '$originalAttributes': {
      id: 2,
      code: 'ING-NOT-2019',
      description: 'Inglês Noturno 2019',
      start_date: 2019-12-30T03:00:00.000Z,
      end_date: 2019-12-31T03:00:00.000Z,
      period: 'Noturno',
      language: 'Inglês',
      status: false,
      user_id: 1,
      created_at: 2019-12-30T13:04:47.000Z,
      updated_at: 2020-01-05T19:08:00.000Z,
      language_substring: 'US'
    },
    '$relations': {},
    '$sideLoaded': {},
    '$parent': null,
    '$frozen': false,
    '$visible': undefined,
    '$hidden': undefined
  }
]

我調查了整個 Adonisjs 框架源代碼,並在BaseModel類定義中找到了這一點 它返回一個proxy ,並且在代理內部,他可以捕獲屬性的getset ,並執行許多您在使用框架時不一定需要知道的事情。

我的建議是避免這種情況:

idioma[i].quiz = livrosUnidadesGerarQuiz

這樣你就會觸發 BaseModel 的設置陷阱並做你不需要的事情。

嘗試將事物分開保存,如下所示:

const idiomas = [];

...

const quiz = await this.getLivrosUnidadesGerarQuiz(idsClassesEstudante[i], idBookClasseEstudante[0], qtdQuizGerar);
const idioma = await this.getDadosClasseIdiomaEstudante(idsClassesEstudante[i])'
idiomas.push({ quiz, idioma });

...

這樣您就不會遇到與之相關的訪問器或序列化問題,並且您知道idiomas[i].idioma是模型類。

暫無
暫無

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

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