Javascript 使用forEach Angular 4的多个POST请求

Javascript 使用forEach Angular 4的多个POST请求,javascript,angular,foreach,http-post,rxjs,Javascript,Angular,Foreach,Http Post,Rxjs,因此,我尝试从数组中以角度执行POST请求。基本上,当用户选择列表中的多个项目时,他们可以“解锁”每个项目。所以我遇到的问题是如何用forEach做一篇文章。我可以用forLoop做一篇文章,但问题是当它做一篇文章时,它不会做另一篇。有人能指出我做错了什么,或者是否有更好的解决方案 以下是我为找到可能的解决方案而查看的其他堆栈问题: 组件技术 locked: Array<any> = []; // Unlock unlock() { let observer = {

因此,我尝试从数组中以角度执行POST请求。基本上,当用户选择列表中的多个项目时,他们可以“解锁”每个项目。所以我遇到的问题是如何用forEach做一篇文章。我可以用forLoop做一篇文章,但问题是当它做一篇文章时,它不会做另一篇。有人能指出我做错了什么,或者是否有更好的解决方案

以下是我为找到可能的解决方案而查看的其他堆栈问题:

组件技术

locked: Array<any> = [];
// Unlock
  unlock() {
    let observer = {
      next(data) {
        data => console.log(data)
      },
      error(error) {
        return new Error('Post Error');
      },
      complete() {
        console.log("Completed");
        // window.location.reload();
      }
    }
    // On unlock send lock data to Service for POST
    this.http.postUnlock(this.unlocked).subscribe(observer);
  }
它是与可观察的事物有关,还是可以用承诺来处理


谢谢您的帮助。

这里是您所寻找的()和您的代码的混合

对于将退出函数()的每个函数,不能从返回值

希望能有帮助

postUnlock(locked){
  //create an array of Observables
  let allQueries = locked.map(lock => {
    let newBody = JSON.stringify(lock);
    let auth = lock.AuthID;
    let form = lock.FormName;
    let options = new RequestOptions({ headers: headers, method: 'post', body: newBody });
    let newUrl = this.url + `?authid=${auth}&formname=${form}`;
    // POST to URL
    return this.http.post(newUrl, options).map(res => res.json());
  });

  //return a new observable that will emit all the http results
  return Observable.forkJoin(allQueries)
}

这里是您所寻找的()和您的代码之间的混合

对于将退出函数()的每个函数,不能从返回值

希望能有帮助

postUnlock(locked){
  //create an array of Observables
  let allQueries = locked.map(lock => {
    let newBody = JSON.stringify(lock);
    let auth = lock.AuthID;
    let form = lock.FormName;
    let options = new RequestOptions({ headers: headers, method: 'post', body: newBody });
    let newUrl = this.url + `?authid=${auth}&formname=${form}`;
    // POST to URL
    return this.http.post(newUrl, options).map(res => res.json());
  });

  //return a new observable that will emit all the http results
  return Observable.forkJoin(allQueries)
}

总之,您在组件中调用了服务“http”?@Wandrille是的,我在组件中添加了服务,并从文件中导入了该服务。当我使用forEach时,我确实收到一个错误属性“subscribe”在类型“void”上不存在,forLoopReplace
已锁定。forEach
by
返回已锁定。map
;)不会产生此错误@马克西姆,你是说要这么做<代码>返回locked.map((lock)=>{let newBody=JSON.stringify(lock);let auth=lock.AuthID;let form=lock.FormName;let options=newrequestoptions({headers:headers,method:'post',body:newBody});let newUrl=this.url+`?AuthID=${auth}&FormName=${form form name`;//post-to-url返回this.http.post(newUrl,options).map(res=>res.json());});@Maxime在更改为
return locked.map之后,我现在有一个错误:TypeError:this.http.postenlock(…).subscribe不是一个函数,来自component.ts fileTo be sur,您在组件中调用了服务“http”?@Wandrille是的,我在组件中添加了服务,并从文件中导入了该服务。当我使用forEach时,我确实收到一个错误。属性“subscribe”在类型“void”上不存在,但是,它不会产生此错误使用forLoopReplace
locked.forEach
by
return locked.map
;)@Maxime,那么你是说这样做<代码>返回locked.map((lock)=>{let newBody=JSON.stringify(lock);let auth=lock.AuthID;let form=lock.FormName;let options=newrequestoptions({headers:headers,method:'post',body:newBody});let newUrl=this.url+`?AuthID=${auth}&FormName=${form form name`;//post-to-url返回this.http.post(newUrl,options).map(res=>res.json());});
@Maxime在更改为
return locked.map之后,我现在有一个错误:TypeError:this.http.postenlock(…).subscribe不是一个函数,来自组件。ts文件是的,有多种方法可以侦听多个观察对象。
forkJoin
听起来像是您想要的。它将等待所有这些操作完成,然后发出一个值数组,该数组对应于每个观察对象发出的最后一项。这在处理时很好使用promise-like Observable(例如,
Http
),发射一次,然后完成。如果您想处理每个项目,您可以使用
merge
,如果您的Observable发射多次,则可以处理组合每组发射的方法(例如,
zip
CombineTest
)。是的,有很多方法可以监听多个观察对象。
forkJoin
听起来像是您想要的。它将等待所有观察对象完成,然后发出一系列值,这些值对应于每个观察对象发出的最后一项。当您处理类似承诺的观察对象(例如
Http
)时,这很好发射一次,然后完成。如果你想在每个项目进入时处理它,你可以使用
merge
,如果你的观察物发射多次,有多种方法可以处理组合每组发射(例如
zip
CombineTest
)。