需要对Angular 8中的同一端点进行多个异步调用
我有一个get调用,它只接受一个搜索号码并返回结果。我有一个要求,我需要使用同一个需要对Angular 8中的同一端点进行多个异步调用,angular,http,asynchronous,rxjs,Angular,Http,Asynchronous,Rxjs,我有一个get调用,它只接受一个搜索号码并返回结果。我有一个要求,我需要使用同一个GETcall搜索多个号码。我知道可以通过POST调用打开新端点来实现,但不幸的是,我必须使用现有的GET调用 我将循环数组,并对多个号码列表中的每个号码进行调用 我想知道为每个号码打电话的最佳方式是什么,一旦有一个号码的结果可用,就更新用户界面,而不是等待所有电话结束 这是我的GETcall searchNumbers( Request: string, type: string) { const
GET
call搜索多个号码。我知道可以通过POST
调用打开新端点来实现,但不幸的是,我必须使用现有的GET
调用
我将循环数组
,并对多个号码列表中的每个号码进行调用
我想知道为每个号码打电话的最佳方式是什么,一旦有一个号码的结果可用,就更新用户界面,而不是等待所有电话结束
这是我的GET
call
searchNumbers(
Request: string, type: string) {
const requestOptions = {
headers: this.headers
};
const url = `${environment.customerApiUrl.status}?${type.toLowerCase()}=${Request}`;
return this.httpClient.get(
url, requestOptions );
}
异步调用此端点并在我从数字列表中收到任何特定数字的数据后立即更新UI的最佳方法是什么。要完成此操作,可以使用创建单独发射每个数组元素的可观察流。然后使用将每个值映射到api调用(返回可观察的),并将其输出合并到创建的流中:
searchMultipleNumbers(数字:number[]){
从(数字)返回。管道(
mergeMap(id=>this.httpClient.get(`url/${id}`)
);
}
调用的输出响应将在它们返回时单独发出
这是一张工作票
如果希望在每次响应返回时发出全部结果的完整阵列,则可以使用发出所有发射的阵列
searchMultipleNumbers(数字:number[]){
从(数字)返回。管道(
mergeMap(id=>this.httpClient.get(`url/${id}`)),
扫描((全部,val)=>[…全部,val],])
);
}
()
要捕获并忽略错误,您可以使用并仅返回:
searchMultipleNumbers(数字:number[]){
从(数字)返回。管道(
mergeMap(id=>this.httpClient.get(`url/${id}`).pipe(catchError(()=>EMPTY))
);
}
我理解正确吗:所以你想循环一个数字数组,比如说[3,4,5]然后对这些数字中的每一个进行get调用?您希望结果存储在哪里?将它们放入某种结果数组中?到目前为止您尝试了什么?感谢这个解决方案。我还有一个问题,您可以直接使用假的httpClient
。您能告诉我如何从服务调用该函数吗de>searchMultipleNumbers(number:number[]){从(numbers.pipe)返回(mergeMap(id=>this.myService.searchFunction(id));}看起来可以正常工作。获取错误error TS2345:type'(id:string)=>void'的参数不能分配给type'(value:string,index:number)的参数=>ObservableInput.类型'void'不可分配给类型'ObservableInput'。
我可以将其移动到我发出http请求的服务调用中吗。`return from(numbers).pipe(mergeMap(id=>this.httpClient.get(url/${id}
);`不用管我让它工作了。谢谢你的帮助。