Ionic 4:helperService 中的 'Typescript error' 无法读取 HelperService 中未定义的 属性 'length'

Ionic 4: 'Typescript error' in helperService Cannot read property 'length' of undefined at HelperService

尝试循环遍历已作为参数传递到 helperService [=28= 中的数组时出现错误“无法读取 HelperService.addCommasToArray 处未定义的 属性 'length'” ] [打字稿]

我真的不确定为什么这不起作用 - 我相信它应该很简单 - 我想做的就是传入一个数组作为参数并在数组(最后一个值除外)

这是我的 HelperService Class 方法:

 export class HelperService {

   constructor() { }

    /*
    * Add commas to every value in the array except for the last value
    */
     addCommasToArray(array: Array<any>) : Array<any> {

         for (let i = 0; array.length; i++){
              array[i] += ", ";
             }
         return array;
         }     
 }

然后我在另一个 ts class

的 ngInit 中调用这个方法
  this.helperService.addCommasToArray(this.previousClubs);

这是ngInit方法

  public previousClubs: Array<any>;

     constructor(private playersService: PlayersService,private 
      helperService: HelperService, private route: ActivatedRoute) { }

 ngOnInit() {
     const playerId: string = this.route.snapshot.paramMap.get('id');
      this.playersService.getPlayerDetails(playerId).get()
      .then(playerDetailsSnapshot=> {
          this.currentPlayerDetails = playerDetailsSnapshot.data();
          this.currentPlayerDetails.id = playerDetailsSnapshot.id;    
      });

     /*
      * Return Previous Clubs 
      */
        this.playersService.getPreviousClubs(playerId).get().then( 
 previousClubsSnapshot =>{
         this.previousClubs = [];
             previousClubsSnapshot.forEach(snap => {
                 this.previousClubs.push({
                     id: snap.id,
                     name: snap.data().name,
                 });
                 return false;
             });        
         }); 

        this.helperService.addCommasToArray(this.previousClubs);
     }

所以在这里:

this.playersService.getPreviousClubs(playerId).get().then( 
 previousClubsSnapshot =>{
         this.previousClubs = [];
             previousClubsSnapshot.forEach(snap => {
                 this.previousClubs.push({
                     id: snap.id,
                     name: snap.data().name,
                 });
                 return false;
             });        
         });
// this line executes without awaiting for .then enclosed scope
this.helperService.addCommasToArray(this.previousClubs);

基本上你调用 addCommasToArray 甚至在你的 previousClubs var 获取分配给它的数组然后将其所有项目推入之前。要修复因为你的方法是 (.then) async 你需要在 .then 中调用这个方法执行范围:

ngOnInit() {
     const playerId: string = this.route.snapshot.paramMap.get('id');
      this.playersService.getPlayerDetails(playerId).get()
      .then(playerDetailsSnapshot=> {
          this.currentPlayerDetails = playerDetailsSnapshot.data();
          this.currentPlayerDetails.id = playerDetailsSnapshot.id;    
      });

     /*
      * Return Previous Clubs 
      */
        this.playersService.getPreviousClubs(playerId).get().then( 
 previousClubsSnapshot =>{
         this.previousClubs = [];
         previousClubsSnapshot.forEach(snap => {
                 this.previousClubs.push({
                     id: snap.id,
                     name: snap.data().name,
                 });
                 return false;
             });        
         });
         this.helperService.addCommasToArray(this.previousClubs);
     }