【问题标题】:Typescript - Calling function repeatedly from within ForEach() leads to undefinedTypescript - 从 ForEach() 中重复调用函数导致未定义
【发布时间】:2017-07-03 18:59:51
【问题描述】:

我正在尝试遍历由对象组成的对象,其中每个对象的一个​​属性用于进行服务调用。

当我尝试只执行一次并且我可以控制台注销从成功的服务调用返回的数据时,这工作正常,但是当我尝试使用 forEach() 为父对象中的每个对象重复此过程时,我得到错误“无法读取未定义的属性'主机'”。

有人可以解释我缺少什么吗?

这是我的代码现在的示例:

getItemParametersCallback(data){
    ...
    // Parent Object made of Objects 
    // data is returned by a service call 
    this.parentObject = data.json();

    // Iterate through the objects of the parentObject
    const parentObjectItems = Object.keys(this.parentObject);

    parentObjectItems.forEach( key => {
        // I can add an if to limit this to being called once,
        // like if(key === 'apple')... and it works fine
        this.ItemService.getItem(this.getItemCallback.bind(this), 
            this.parentObject[key]);
    });
}

// Console log out the data returned 
getItemCallback(data){
    console.log(data);
}

【问题讨论】:

  • 尝试执行 console.log(this.parentObject) - 也许它缺少一些属性。
  • 很遗憾没有错过任何一处房产。我可以使用 if 语句将 foreach 限制为 2 个属性,我知道每个属性都将单独返回,而不是在我尝试同时返回两者时。不过还是谢谢。
  • getItemgetItemCallback 方法是否会以某种方式改变状态?
  • 我不这么认为。它只是对 REST API 的服务调用。当我指定一个对象来运行服务调用时,我可以使用它来取回一个 json 对象。也许是因为服务调用正在运行,然后在之前的回调完成之前再次运行?
  • "Cannot read property 'host' of undefined". - 应该有host 的对象是什么?否则看起来你在做类似this 的事情,但有很多像bindObject.keys 这样的JS 东西。做类似在 hastebin 中的事情会起作用吗?

标签: javascript angular typescript foreach


【解决方案1】:

来自您的代码:

this.parentObject = data.json();

// Iterate through the objects of the parentObject
const parentObjectItems = Object.keys(this.parentObject);

data.json / .json 方法返回一个承诺。所以Object.keys(this.parentObject) 是错误的。

解决方案

使用.thenasync/await 解开延续。

更多

【讨论】:

  • 那么是这样的吗? const entityValues = value.json().then(data => ({ data: data, status: data.status }) ).then(res => { console.log(res.status, res.data.title) });
  • @gv0000 确实?
猜你喜欢
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 2014-03-21
  • 2013-02-17
  • 2011-10-04
  • 1970-01-01
  • 2015-03-29
  • 2014-07-07
相关资源
最近更新 更多