В основном при первом вызове я хотел бы получить идентификаторы предметов из многозначного поискового поля. Затем я хотел бы использовать идентификаторы в foreach для вызова REST API для каждого из них, чтобы получить более подробную информацию. Однако, возможно, для этого есть совершенно другой подход, поэтому, пожалуйста, поправьте меня, если этот подход не подходит.
Текущий код:
private _getAssignments(itemID: number)
{
this.readAssignmentIDs(itemID);
}
private readIDs(itemID: number) {
this.props.spHttpClient.get(`${this.props.siteUrl}/_api/web/lists/GetByTitle('LISTNAME')/items(`+itemID+`)?$select=Assignments/ID&$expand=Assignments`,
SPHttpClient.configurations.v1, { headers: { 'Accept': 'application/json;odata=nometadata', 'odata-version': '' }
}).then((response: SPHttpClientResponse): Promise<{value: any[]}> =>{
return response.json();
}).then((response: {value: any[]}): void => {
// save the collection of IDs for later use
this.setState({
dialogItemAssignmentsIDs: response[' Assignments ']
});
// call to another method to use the collection of IDs for the FOREACH
this.readRecords(response[' Assignments ']);
}, (error: any): void => { // handle error
});
}
private readRecords(items: any[]) {
this.state.dialogItemAssignmentsIDs.forEach(element => {
this.props.spHttpClient.get(`${this.props.siteUrl}/_api/web/lists/GetByTitle('Assignments')/items(`+element.ID+`)?$select=OwnerPerson/Name,AssignedToPerson/Name&$expand=OwnerPerson,AssignedToPerson`,
SPHttpClient.configurations.v1, { headers: { 'Accept': 'application/json;odata=nometadata', 'odata-version': '' }
}).then((response: SPHttpClientResponse): Promise<{value: any[]}> =>{
return response.json();
}).then((response: {value: any[]}): void => {
this.setState({
dialogItemAssignmentsRecords: response.value
});
});
});
}
Я не знаю, как написать асинхронную функцию для возврата данных, а затем последовательно вызывать другой метод после завершения первого.