Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 等待API在中完成_Javascript_Angular_Typescript_Api - Fatal编程技术网

Javascript 等待API在中完成

Javascript 等待API在中完成,javascript,angular,typescript,api,Javascript,Angular,Typescript,Api,在Angular中,是否有人知道一种简单的方法,可以让我的组件等待几秒钟,以确保对暂停服务.PostMoratoriumLocationsArray()方法的调用在navigateByUrl()启动路由器之前完成。代码如下。如有任何建议,将不胜感激--杰森 postmoratiumlocationsarray(moraID:any,moratiumlocationsarray:moratiumlocation[]):可见{ 此.moraID.moratiumlocationsarray(mora

在Angular中,是否有人知道一种简单的方法,可以让我的组件等待几秒钟,以确保对
暂停服务.PostMoratoriumLocationsArray()方法的调用在
navigateByUrl()启动路由器之前完成。代码如下。如有任何建议,将不胜感激--杰森

postmoratiumlocationsarray(moraID:any,moratiumlocationsarray:moratiumlocation[]):可见{
此.moraID.moratiumlocationsarray(moraID,moratiumlocationsarray)
.pipe(takeUntil(this.ngUnsubscribe))
.subscribe((数据)=>(此.molatoriumid)=(数据),
(错误)=>(console.log(错误)),
()=>console.log(“暂停的暂停后位置已完成”),
);
这个.router.navigateByUrl('activemortations');
归还(本暂停令);
}

这是一个异步函数,您可能不知道服务器响应的时间有多长。你应该 试试下面的代码

PostMoratoriumLocationsArray(moraID: any, moratoriumLocationsarray: MoratoriumLocation[]): Observable<any> {
    var subject = new Subject<string>();
    this.moratoriumService.PostMoratoriumLocationsArray(moraID, moratoriumLocationsarray)
      .pipe(takeUntil(this.ngUnsubscribe))
      .subscribe((data) => {
          (this.moratoriumID) = (data);
          this.router.navigateByUrl('ActiveMoratoriums');
           subject.next(data);
        },
        (error) => (console.log(error)),
        () => console.log('Post moratorium location for moratorium is complete'),
      );
      return subject.asObservable();
  }
postmoratiumlocationsarray(moraID:any,moratiumlocationsarray:moratiumlocation[]):可见{
var subject=新的subject();
此.moraID.moratiumlocationsarray(moraID,moratiumlocationsarray)
.pipe(takeUntil(this.ngUnsubscribe))
.订阅((数据)=>{
(本暂停令)=(数据);
这个.router.navigateByUrl('activemortations');
主题。下一步(数据);
},
(错误)=>(console.log(错误)),
()=>console.log(“暂停的暂停后位置已完成”),
);
返回subject.asObservable();
}

取而代之的是建立在管道内部的可观察的基础上,让调用者订阅怎么样?像这样

PostMoratoriumLocationsArray(moraID: any, moratoriumLocationsarray: MoratoriumLocation[]): Observable<any> {
    return this.moratoriumService.PostMoratoriumLocationsArray(moraID, moratoriumLocationsarray)
               .pipe(takeUntil(this.ngUnsubscribe),
                     tap(data => 
                         {
                             this.moratoriumID = data
                             this.router.navigateByUrl('ActiveMoratoriums');
                         },
                         error => console.log(error),
                         () => console.log('Post moratorium location for moratorium is complete'),
      ));
  }
postmoratiumlocationsarray(moraID:any,moratiumlocationsarray:moratiumlocation[]):可见{
返回此.MOLATIUMSERVICE.POSTREATIUMLOCATIONSARRAY(moraID,MOLATIUMLOCATIONSARRAY)
.pipe(takeUntil(此.ngUnsubscribe),
点击(数据=>
{
this.molatoriumid=数据
这个.router.navigateByUrl('activemortations');
},
error=>console.log(错误),
()=>console.log(“暂停的暂停后位置已完成”),
));
}

当您调用该方法时,您可以执行以下操作:
this.PostMoratoriumLocationsArray(…).subscribe()

将navigateByUrl语句移动到observable的完整处理程序应该执行此操作,您只需在管道中添加
轻触
,并跳过subscribe@pc_coder-谢谢你,这似乎奏效了。还是个新手。那么在这种情况下,主体似乎或多或少地消耗了数据--杰森
PostMoratoriumLocationsArray(moraID: any, moratoriumLocationsarray: MoratoriumLocation[]): Observable<any> {
    return this.moratoriumService.PostMoratoriumLocationsArray(moraID, moratoriumLocationsarray)
               .pipe(takeUntil(this.ngUnsubscribe),
                     tap(data => 
                         {
                             this.moratoriumID = data
                             this.router.navigateByUrl('ActiveMoratoriums');
                         },
                         error => console.log(error),
                         () => console.log('Post moratorium location for moratorium is complete'),
      ));
  }