Skip to content

Instantly share code, notes, and snippets.

@chrisobriensp
Last active September 21, 2016 09:23
Show Gist options
  • Select an option

  • Save chrisobriensp/4daef8612de623ccc268cb723ea2111c to your computer and use it in GitHub Desktop.

Select an option

Save chrisobriensp/4daef8612de623ccc268cb723ea2111c to your computer and use it in GitHub Desktop.
Demonstrates calling SharePoint search using SharePoint Framework HttpClient object with Promises (in TypeScript). See http://cob-sp.com/SPFX-Promises
// shows function first, then calling code below - note two functions are used here..
public GetResultsFromHttpClient (context: IWebPartContext, url: string): Promise<ISharePointSearchResults> {
return context.httpClient.get(url, {
// workaround for httpClient/search API issue..
headers: {
"odata-version": ""
}}).then((response: Response) => {
if (response.ok) {
console.log("Returned OK from httpClient");
return response.json();
} else {
console.log("WARNING - failed to hit URL " + url + ". Error = " + response.statusText);
}
});
}
public GetSearchResultsFromHttpClient (context: IWebPartContext, query: string, rowLimit: number): Promise<ISearchResult> {
var self: Search = this;
var url: string = self.getSearchUrl(query, rowLimit);
return new Promise<ISearchResult>((resolve, reject) => {
var results: SearchResult[] = new Array();
self.GetResultsFromHttpClient(context, url).then((searchResults: ISharePointSearchResults) => {
var relevantResults: ISharePointSearchResultsTable = (searchResults.PrimaryQueryResult !== null) ? searchResults.PrimaryQueryResult.RelevantResults.Table : null;
if (relevantResults !== null) {
console.log("Success executing search query. Fetched " + relevantResults.Rows.length + " results.");
results = self.processSearchResults(relevantResults);
resolve({Message: 'Success', Results: results});
}
else {
var msg: string = "ERROR: No search results found!";
console.log(msg);
resolve({Message: msg, Results: results});
}
});
});
}
// calling code:
Search.GetSearchResultsFromHttpClient(self.context, self.properties.searchQuery, self.properties.itemLimit).then((data) => {
self.renderResults(data, self.domElement);
}).catch((response) => {
console.log("Error getting results from httpClient - " + response);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment