如何在不使用角型脚本

时间:2018-07-18 11:13:41

标签: angular typescript

嗨,朋友们,我正在开发一个应用程序,该程序通过Gmail API列出用户的电子邮件。为此,我有一个方法列出了用户帐户中的线程,然后提取了该线程中的消息。我的功能如下:

   public listThreads(opt_params){
    gapi.client.load('gmail', 'v1', function(){

        let request = gapi.client.gmail.users.threads.list({
            'userId': 'me',
            'q': opt_params
        });
        request.execute(function(response) {

            $.each(response.threads,  function() {

               let thread_id = this.id;

               this.getThread(thread_id, this.process_thread);
// error appears on above line. which says "this.getThread is not a function" 
            });
        });
});
    }

错误是“ this.getThread不是函数”。这是因为“ this”现在是指响应对象,而不再是类成员。但是我需要调用getThread函数。因此,我需要知道是否有其他方法可以在没有此关键字的情况下调用类函数?

2 个答案:

答案 0 :(得分:1)

如果不使用this

,则无法调用打字稿方法

相反,您应该在代码中的三个位置而不是arrow operators (=>)处使用胖function,以保留this的上下文。

  1. gapi.client.load()的参数

     gapi.client.load('gmail', 'v1', () => {
              ......
     });
    
  2. request.execute()的参数

    request.execute((response) => {
           ....
    })
    
  3. $。each的参数

    $.each(response.threads, () => {
           let thread_id = this.id;
    
           this.getThread(thread_id, this.process_thread);
           // this should be accessible here
    });
    

答案 1 :(得分:0)

由于上下文,this在回调中丢失。在打字稿中使用箭头功能可以保留上下文!

request.execute().then((response)=> { // here you will have access to 'this' })