2017-06-29 114 views
0

我有一个getProgrammeWrapper方法返回一个承诺。然而,在.then方法,我有一些其他的承诺,相信我会想返回programmeWrapper[]嵌套提示,不等待结果

前执行这是service.ts enter image description here

我打电话ngOnInit

this.service.getProgrammesByWrapper().then(((res) => { 
      this.programmes = res; 
      this.result.updateInfo("Sorting classes...") 
      this.programmes =this.programmes.sort((a,b) => { 
       return b.programme.click - a.programme.click; 
      }); 
      this.result.updateSuccess(true); 
     })); 

的服务,我希望我有明确解释了这个问题。我尝试过使用await,但它不能按预期工作。

getProgrammeWrapper()

getProgrammesByWrapper(): Promise<ProgrammeWrapper[]> { 
     var current = this; 
     var programmesDTO = new Array<ProgrammeWrapper>(); 
     var table = this.client.getTable("programme"); 
     return new Promise((resolve, reject) => { 
      table.read() 
       .then(function (modules) { 
        modules.forEach(element => { 
         var newProgDTO = new ProgrammeWrapper(element); 
         current.getLessonsByProgrammeId(element.id).then(lessons => newProgDTO.lesson = lessons).catch(err => console.log(err)); 
         current.getUser(element.tutorId).then(user => newProgDTO.tutor = user).catch(err => console.log(err)); 
         programmesDTO.push(newProgDTO) 
        }); 
        resolve(programmesDTO) 
       }, function (error) { reject(error) }); 
     }); 
    } 
+0

'resolve'做什么? – Shai

+0

resolve返回在过程中填充的programmeDTO的数组。 – User1911

+0

你可以发布getProgrammesByWrapper()的代码,而不是它的图像,所以我可以改变它的一些答案? – Shai

回答

1

我不知道它会工作,可能有错误了。试试这个:

getProgrammesByWrapper(): Promise<ProgrammeWrapper[]> { 
    var current = this; 
    var programmesDTO = new Array<ProgrammeWrapper>(); 
    var table = this.client.getTable("programme"); 

    return new Promise((resolve, reject) => { 
     table.read() 
     .then(function (modules) { 
      let promises = new Array<Promise<any>>(); 

      modules.forEach(element => { 
       var newProgDTO = new ProgrammeWrapper(element); 

       let promise = current.getLessonsByProgrammeId(element.id) 
       .then(lessons => newProgDTO.lesson = lessons) 
       .catch(err => console.log(err)); 

       promises.push(promise); 

       promise = current.getUser(element.tutorId) 
       .then(user => newProgDTO.tutor = user) 
       .catch(err => console.log(err)); 

       promises.push(promise); 
       programmesDTO.push(newProgDTO) 
      }); 

      // Wait for all promises to be ready before resolving 
      Promise.all(promises).then(function() { 
       resolve(programmesDTO); 
      }); 
     }, function (error) { reject(error); }); 
    }); 
} 
+0

谢谢它的工作原理。没有多少解决是必需的。 – User1911

+0

太棒了!你必须做出什么改变? 我会修改我的答案让其他人看到。 – Shai

+0

不在你的答案。你的回答很好。但之后我做了一些改变。所以我只是更新了你的。 – User1911