0

I have following code:

var myObj = [
  {
        "idArray": [
              "org.network#xyz1",
              "org.network#xyz2"
        ]
  },
  {
        "idArray": [
              "org.network#xyz3"
        ]
  }]



getTransferRequest = (id) => {
   let respObj;
   this._fetchTransferRequestData.getTransferRequest(id).subscribe(
     data => {
       respObj = data;
     },
     err => console.log(err),
     () => {
        return JSON.parse(respObj.message)
     });
}

myObj.map(obj => (
      obj["requestObjs"] = obj.idArray.map(transferId => this.getTransferRequest(transferId.split("#")[1]))
    ))

expected value of myObj after code runs :

[
  {
        "idArray": [
              "org.network#xyz1",
              "org.network#xyz2"
        ],
        "requestObjs":[{"myid" : "xyz1"},{"myid" : "xyz2"}]
  },
  {
        "idArray": [
              "org.network#xyz3"
        ],
              "requestObjs":[{"myid" : "xyz3"}]
  }]

But I'm getting this for myObj's value :

[
  {
        "idArray": [
              "org.network#xyz1",
              "org.network#xyz2"
        ],
        "requestObjs":[undefined,undefined]
  },
  {
        "idArray": [
              "org.network#xyz3"
        ],
        "requestObjs":[undefined]
  }]

Seems, map function executes before getTransferRequest returns the value. What am I doing wrong or what modification needs to be added to make it work. _fetchTransferRequestData.getTransferRequest calls an api. (To be clear, getTransferRequest contains an api call using rxJs's subscribe function and it is an Angular 6 code.)

0 Answers0