等待第三方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。