遍历数组时出现“ [__array_observer__:ModifyArrayObserver]”

时间:2018-08-17 20:32:10

标签: javascript aurelia

这里的第一个问题,所以让我知道我是否未包括所有需要的东西。

我有一个名为this.tickets的数组,该数组存储在我的构造函数中,如下所示:

  constructor(TicketService) {
    this.ticketService = TicketService;
    this.customers;
    this.tickets = [];
    this.status = false;
  }

我有一个函数,该函数可以在检查本地数据库中是否存在api之后一次调用api并将响应数据推送一次。

  setTickets () {
     this.customers.forEach(data => {
      var acctName = encodeURIComponent(data.accountname);
      this.ticketService.getTicketByAccount(acctName).then(resp => {
        if (resp.data.accountname == data.accountname) {
          this.tickets.push(resp.data)
        }
      })
    })
  }

然后,我尝试使用单独的函数遍历数组:

  getZendeskTicketStatus () {
    console.log(this.tickets)
    console.log("this is the arrys length: " + this.tickets.length)
    for (var i = 0; i < this.tickets.length; i++) {
      console.log(this.tickets[i])
    }
  }

我得到以下回应:

[__array_observer__: ModifyArrayObserver]
this is the arrys length: 0

我在诺言中调用了每个函数,以便它们按顺序发生。

    activate() {
    new Promise((resolve, reject) => {
        var customerPromise = this.setCustomers();
        resolve(customerPromise);
        console.log("First")
      })
      .then(() => {
        console.log("Second")
        this.setTickets();
      })
      .then(() => {
        console.log("Third")
        this.createTicketsInDb();
        this.getZendeskTicketStatus();
      })
  }

我不知道这个array_observer是什么,或者我如何成功遍历这个数组。

任何帮助将不胜感激。

先谢谢您。

1 个答案:

答案 0 :(得分:0)

尝试理解此示例,希望它能阐明 因此,如果我调用setTicket并不意味着它要等待响应。 所以让setTickets等待响应,我做了这个修改

setTickets () {
    return new Promise((resolve, reject)=>{
        this.customers.forEach(data => {
            var acctName = encodeURIComponent(data.accountname);
            this.ticketService.getTicketByAccount(acctName).then(resp => {
              if (resp.data.accountname == data.accountname) {
                this.tickets.push(resp.data)
              }
              resolve();
            })
          })
    })

 }

现在请调用函数等待响应

activate() {
    new Promise((resolve, reject) => {
        var customerPromise = this.setCustomers();
        resolve(customerPromise);
        console.log("First")
    }).then(async () => {
        console.log("Second");
        //dont skip it till the time you get the response
     await  this.setTickets();
    }).then(() => {
        console.log("Third");
         this.createTicketsInDb();
this.getZendeskTicketStatus();
    })
}

希望这可以澄清。