Angular HTTP Post несколько JSON объектов - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь опубликовать несколько JSON объектов через HTTPClient. Я хочу отправлять их как один объект за раз, последовательно, один за другим. Как мне это сделать?

В настоящее время я сопоставляю другой массив объектов. Мне уже нужно создать новый массив объектов, который я хочу опубликовать. Я могу успешно console.log массив гигантских объектов (86 объектов) один за другим, используя цикл for; но я не могу понять, как http размещать их один за другим.

    this.newdailys = this.rooms.map(room => ({ 
      id: null,
      timeCreated0: this.date,
      roomid1: room.id,
      guestwaiting2: null,
      supervisorconfirmed3: null,
      finishedcleaning4: null,
      staffid5: null,
      bathtowelIN6: null,
      bathtowelOUT7: null,
      bathmattIN8: null,
      bathmattOUT9: null,
      sheetSIN10: null,
      sheetSOUT11: null,
      duvetSIN12: null,
      duvetSOUT13: null,
      sheetDIN14: null,
      sheetDOUT15: null,
      duvetDIN16: null,    
      duvetDOUT17: null,
      pillowcaseIN18: null,
      pillowcaseOUT19: null,
      bolstercaseIN20: null,
      bolstercaseOUT21: null,
      sugarIN22: null,
      teaIN23: null,
      coffeeIN24: null,
      creamerIN25: null,
      stirerIN26: null,
      mwaterIN27: null,
      slipperIN28: null,   
      barsoapIN29: null,
      shampooIN30: null,
      dentalkitIN31:null,
      cottonbudIN32: null,
      showercapIN33: null,
      roomtissueIN34: null,
      HBTIN35: null,
      coasterglassIN36: null,
      plastikbeningIN37: null,
      mug238: null,
      electricjug39:null,
      tumblerglass240:null,
      traymerah141: null,
      sugarbowl142: null,
      bedskirting43: null,
      bedpad44: null,
      hanger45:null,
      telpon46: null,
      lamp47: null,
      hairdryer48: null,
      jetshower49: null,
      television50: null,
      underbed51: null,
      timeCompleted52: null,
      deleted53: false,
      }))
      for (let i = 0; i < newdailys.length; i++) {
      return this.http.post(http://localhost:3000/dailys, newdailys[i])}} 

/// what has worked was for (let i = 0; i < newdailys.length; i++) {
      console.log(newdailys[i])}


1 Ответ

0 голосов
/ 18 февраля 2020

Ну вот:

for (let i = 0; i < newdailys.length; i++) {
      return this.http.post(http://localhost:3000/dailys, newdailys[i])
}

всегда будет возвращаться после публикации первого объекта. Ваш оператор return немедленно вернется к вызывающей функции и прервет for-l oop.

Как и Квентин, уже упомянутый в его комментарии, все зависит от того, как ваша серверная сторона ожидает их форматирования. Но в соответствии с вашим вопросом, я полагаю, вы просто хотите отправить каждый объект в отдельном почтовом запросе.

Просто удалите оператор return внутри вашего for-l oop. Конечно, вы хотите что-то сделать с ответами на ваши запросы. Одним из решений может быть использование оператора rx js forkJoin. и возвращение получаемой наблюдаемой.

Например, вы можете придумать что-то вроде:

postObjects(newdailys: any[]) {
    const postObservables: Observable<any>[] = newdailys.map(daily => this.http.post('http://localhost:3000/dailys', daily));
    return forkJoin(...postObservables);
  }

Но, как уже упоминалось выше, это полностью зависит от того, что вы хотите сделать с результатами.

...