等待第三方JS库在Angular 2服务中完成初始化的最佳方式?

问题描述:

我在Angular服务中封装了第三方JS库。我如何保证第三方JS库加载/初始化/等。在使用我的服务之前?等待第三方JS库在Angular 2服务中完成初始化的最佳方式?

你可以看看下面的代码,并告诉我这是不是一个好的编码练习?我在服务的构造函数中设置了一个承诺(承诺最终会实现),并且我的服务方法取决于该承诺的成功(请参阅getMessages)。

@Injectable() 
export class GmailService { 

    private _readyPromise; 

    // Load Gmail API client library. 
    // gapi.client.load() returns a promise. 
    constructor() { 
    this._readyPromise = gapi.client.load('gmail', 'v1'); 
    } 

    private ready():Promise { 
    return this._readyPromise; 
    } 

    // Return Gmail messages for the current user. 
    getMessages() { 
    return this.ready().then(() => { 
     return gapi.client.gmail.users.messages.list({ 
     'userId': 'me' 
     }).then(resp => console.log(resp)); 
    }); 
    } 
} 

在这种为例,我使用JavaScript的Gmail的API,它原来是gapi.client.load()已经返回一个承诺,这简化了代码。在另一种情况下,我可以创建自己的承诺,并在满足特定条件时手动完成承诺。

你的方法似乎很好!另外一个是您的Gmail API库被加载后,引导你的应用程序:

var app = platform(BROWSER_PROVIDERS) 
    .application([BROWSER_APP_PROVIDERS, appProviders]); 

gapi.client.load('gmail', 'v1').then(() => { 
    return app.bootstrap(AppComponent); 
}); 

这样,你一定会认为该库的应用程序中使用时,它已准备就绪。

下面是描述全局方法的相应plunkr:https://plnkr.co/edit/ooMNzEw2ptWrumwAX5zP?p=preview