财产在承诺中未定义,但在承诺之外工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了财产在承诺中未定义,但在承诺之外工作相关的知识,希望对你有一定的参考价值。

我需要根据另一个不同对象的数组过滤一个数组,但具有相同的关键字段。这是我到目前为止,但我不知道为什么我得到错误。

@Component({
  selector: 'equipment',
  templateUrl: './equipment.component.html',
  styleUrls: ['./equipment.component.css']
})
export class EquipmentComponent implements OnInit {
  @Input() equip: OrderMachine
  @Input() price: ProductPricing
  inEdit = false

  pricing: ProductPricing[]
  accessories: ProductMachineAccessories[]
  accessoriesToAdd: ProductMachineAccessories[]
  constructor(private orderService: OrderService) { }

  ngOnInit() {
    this.pricing = this.orderService.getPricing()

    this.orderService.getAccessories(this.equip.machineId).then((accessories) => {
      this.accessories = accessories
      this.accessoriesToAdd = accessories
      console.log(this.accessoriesToAdd.length)  // No error -- displays a number in the console
       
       this.equip.accessories.forEach(function(aa) {
         console.log(this.accessoriesToAdd.length) //error at the bottom
      //    this.accessoriesToAdd = this.accessoriesToAdd.filter(a => a.accessoryId !== aa.accessoryId)
          
        })
    })


    }
}


//core.es5.js:1020 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'accessoriesToAdd' of undefined
//TypeError: Cannot read property 'accessoriesToAdd' of undefined
//    at equipment.component.ts:39

所以this.accessoriesToAdd在我的控制台窗口中显示一个值,但是当我尝试在我的forEach中执行相同的操作时,它会出错。

答案

代替:

function(aa) { }

使用:

(aa) => { }

然后,在调用this时,您将可以访问EquipmentComponent。如下例所示:

...
this.equip.accessories.forEach( (aa) => {
     console.log(this.accessoriesToAdd.length); // No errors    
})
...

以上是关于财产在承诺中未定义,但在承诺之外工作的主要内容,如果未能解决你的问题,请参考以下文章

在 IE11 中未定义获取错误承诺

Puppeteer -Getting UnhandledPromiseRejectionWarning:管道中未处理的承诺拒绝

为啥在带有 http 承诺的打字稿模块中未定义“this”

反应本机中未处理的承诺拒绝错误?

处理快递申请中未处理的承诺拒绝

react/redux 应用程序中的 js 承诺中未捕获的错误