SPFX - получить элементы списка, а затем использовать их для дополнительного вызова REST API - PullRequest
0 голосов
/ 31 октября 2018

В основном при первом вызове я хотел бы получить идентификаторы предметов из многозначного поискового поля. Затем я хотел бы использовать идентификаторы в 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
          });
      });
    });
  }

Я не знаю, как написать асинхронную функцию для возврата данных, а затем последовательно вызывать другой метод после завершения первого.

...