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()
已經返回一個承諾,這簡化了代碼。在另一種情況下,我可以創建自己的承諾,並在滿足特定條件時手動完成承諾。