我有以下代碼,因爲我沒有與Promises一起工作了很多,然後我試圖理解,這個問題更多的是一個簡單的方法來理解代碼而不是一個特定的問題:瞭解一些Promises代碼和打字稿
private getRequestDigest(siteUrl: string): Promise<string> {
const component: Reactwithmsgraphandsharepoint = this;
return new Promise<string>((resolve, reject): void => {
component.request(`${siteUrl}/_api/contextinfo`, 'POST').then((data: { FormDigestValue: string }): void => {
resolve(data.FormDigestValue);
}, (error: any): void => {
reject(error);
});
});
}
private request<T>(url: string, method: string = 'GET', headers: any = null, data: any = null): Promise<T> {
return new Promise<T>((resolve, reject): void => {
const xhr: XMLHttpRequest = new XMLHttpRequest();
xhr.onreadystatechange = function(): void {
if (this.readyState === 4) {
if (this.status === 200) {
resolve(this.response as T);
}
else if (this.status >= 400) {
reject({
message: this.response['odata.error'].message.value,
statusText: this.statusText,
status: this.status
});
}
}
};
xhr.open(method, url, true);
if (headers === null) {
xhr.setRequestHeader('Accept', 'application/json;odata=nometadata');
}
else {
for (var header in headers) {
if (headers.hasOwnProperty(header)) {
xhr.setRequestHeader(header, headers[header]);
}
}
}
xhr.responseType = 'json';
xhr.send(data);
});
}
在GET請求方法,請求方法執行,但有兩個參數,但是簽名得到更多的,它是如何知道哪些參數?通過參數順序嗎?,它不需要所有參數傳遞?
什麼是解析和拒絕?我知道,然後執行Web請求後執行,然後在我沒有看到一個函數,我看到的數據:{FormDigestValue:字符串}):void =>這是一個語法我不明白。
什麼是解析(this.response as T); ?我來自C#和泛型,看起來它可以返回任何東西?
最後,我可以把任何東西放在拒絕?
拒絕({ 消息:this.response [ 'odata.error'] message.value, 狀態文本:this.statusText, 狀態:this.status });
1 - 參數方法,標題和數據具有默認值,所以如果您不提供它們,則使用默認值。 2 - 解決,拒絕是你用來解決或拒絕承諾的回調函數,3 - =>是一個箭頭函數,4 - 解析是一個Promise概念,5 - 是的,你可以拒絕任何你喜歡的東西 –
避免[ 'getRequestDigest'中的'Promise' constructor antipattern](http://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it)! – Bergi