ค้นหาเว็บไซต์

javascript - RxJs: การเรียกใช้งาน observables 3 ตัวต่อเนื่องกันและใช้ผลลัพธ์จากตัวแรกในตัวที่สอง และตัวแรกและตัวที่สองในคำขอที่สาม


ฉันจำเป็นต้องสามารถเรียกใช้ observables 3 ตัวต่อเนื่องกันเพื่อที่ฉันจะสามารถใช้ค่าผลลัพธ์จากตัวแรกในตัวที่สอง และใช้ผลลัพธ์ของตัวแรกและตัวที่สองในตัวที่สามได้

บางอย่างเช่นนี้ (มันไม่ทำงานเพราะ serviceId ไม่ปรากฏในการร้องขอครั้งที่สาม):

private setupStuff(): void {
        this.initRouteParams().pipe(
            switchMap(serviceId => this.getFileInfo(serviceId)),
            switchMap(fileName => this.getExistingFile(serviceId, fileName)
                .subscribe(response => {
                    console.log(response);
                }))
            );
    }

คำตอบ #1

คุณสามารถส่งค่าของ serviceN กลับไปยัง serviceN+1 อย่างชัดเจน นี่คือแนวคิด:

private setupStuff() {
  this.initRouteParams()
    .pipe(
      switchMap(serviceId => {
        return zip(of(serviceId), this.getFileInfo(serviceId))
      }),
      switchMap(([serviceId, filename]) => {
        return zip(of(serviceId), of(filename), this.getExistingFile(serviceId, filename))
      })
    )
    .subscribe(([serviceId, filename, response]) => {
      console.log(serviceId, filename, response);
    })
}

แก้ไข :

คุณสามารถแก้ไขข้อผิดพลาดของชนิดข้อมูลโดยการประกาศชนิดของแต่ละอินพุตอย่างชัดเจน คุณน่าจะต้องกำหนดชนิดที่เหมาะสมให้กับ response

บทความที่เกี่ยวข้อง