首页 > 解决方案 > 如何在 Angular 的另一个请求中使用订阅的数据

问题描述

我有提交数据的请求。提交数据后,我会收到包含提交项目 ID 的响应。

该 ID 我已将其分配给变量。

现在,我需要在另一个发布请求中使用该变量。

当我尝试时,我可以看到 value 是空白的

 this.sharepointService.createItem().subscribe( (response : Response) => {
      this.lastItemCreatedId = response['d'].ID;  // latitemcreated is a variable
      console.log("Newly created Item ID :" + this.lastItemCreatedId)
    })

现在我需要在另一个请求中使用 lastItemCreatedId

      let url = "_spPageContextInfo.webAbsoluteUrl"+"_api/web/lists/getByTitle('List')/items('"+this.lastItemCreatedId+"')/AttachmentFiles/add(FileName='abc.txt')"

 this.sharepointService.addAttachementstoItem(url).subscribe()

信息:以上两个是发布请求

如何在另一个发布请求中使用 lastItemCreatedID 变量值?

标签: angularangular6

解决方案


由于这两个方法是一个接一个地调用,所以你应该使用 RxJS 的mergeMap操作符。

我们可以使用mergeMap将 observables 映射createItem()到内部 observable 中,随后将其分配为url变量的一部分。然后,我们调用 addAttachementstoItem() 方法,在下一行的 subscribe() 中返回 observables。

import { mergeMap } from 'rxjs/operators';

this.sharepointService.createItem()
  .pipe(
    mergeMap((response : Response) => {
      this.lastItemCreatedId = response['d'].ID;
      let url = "_spPageContextInfo.webAbsoluteUrl"+"_api/web/lists/getByTitle('List')/items('"+this.lastItemCreatedId+"')/AttachmentFiles/add(FileName='abc.txt')"
      return this.sharepointService.addAttachementstoItem(url);
    }).subscribe(res => {
      // do the rest here
    })

推荐阅读