在Observables forkJoin文档中,它说args可以是数组,但没有列出这样做的示例:
https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/forkjoin.md
我已经尝试了类似于我列出的功能(如下),但出现了一个错误:
:3000/angular2/src/platform/browser/browser_adapter.js:76
EXCEPTION: TypeError: Observable_1.Observable.forkJoin is not a function
下面是我的函数的剪切版本:
processStuff( inputObject ) {
let _self = this;
return new Observable(function(observer) {
let observableBatch = [];
inputObject.forEach(function(componentarray, key) {
observableBatch.push(_self.http.get(key + '.json').map((res: Response) => res.json()));
});
Observable.forkJoin(
observableBatch
// );
).subscribe(() => {
observer.next();
observer.complete();
});
});
}
我的问题的根源是在继续之前要结束的循环:Angular2 Observable-如何在继续之前等待循环中的所有函数调用结束?
但是我还没有完全掌握使用数组和正确的语法来正确使用forkJoin。
我非常感谢你能提供的帮助。
thirdFunction() {
let _self = this;
return Observable.create((observer) => {
// return new Observable(function(observer) {
...
observer.next(responseargs);
observer.complete();
});
}
processStuff(inputObject) {
let _self = this;
let observableBatch = [];
inputObject.forEach((componentarray, key) => {
observableBatch.push(_self.thirdFunction().map((res: Response) => res.json()));
});
return Observable.forkJoin(observableBatch);
}
elsewhere() {
this.processStuff(inputObject)
.subscribe()
}
这里是一个使用Angular 12的工作演示。语法与公认的答案有很大的不同(不再可见):
https://stackblitz.com/edit/angular-map-to-forkjoin?file=src/app/app.component.ts
注意:打开Developer Tools控制台,查看我正在做的事情的输出
首先,这将获取一个JSON项数组(在本例中是一个用户数组),并使用map
方法将它们转换为单独的HTTP补丁调用。
private mapCalls(users: any[]): Observable<any>[] {
return users.map(user => {
// Each User will be patched to the endpoint
// None of these calls will be made until forkJoin is used
return this.http.patch(
`https://jsonplaceholder.typicode.com/users/${user.id}`,
user
);
});
}
现在这是一组可观测的数据forkJoin
作为包装器添加,以便进行这些调用
return forkJoin(mappedCalls);
然后可以订阅最终结果,并将其输出为具有相同项计数的单个数组。
注意:如果forkJoin中有一个调用失败,那么它们都将失败。
您需要导入默认情况下未加载的运算符。这就是EXCEPTION Observable.xxxx不是函数
通常的意思。您可以通过向引导程序添加完整的rxjs
来导入所有运算符,例如:
import 'rxjs/Rx'
或通过导入特定运算符,在您的情况下:
import 'rxjs/add/observable/forkJoin'
关于你的代码的另一个观察/建议:试着坚持一种语法。你在混合es5,es6,打字稿...当它工作的时候,从长远来看只会让你困惑。此外,如果您刚刚开始使用可观察性,请尝试避免使用新的可观察性(),而是使用创建运算符;
processStuff( inputObject ) {
let observableBatch = [];
inputObject.forEach(( componentarray, key ) => {
observableBatch.push( this.http.get( key + '.json').map((res: Response) => res.json()) );
});
return Observable.forkJoin(observableBatch);
}
elsewhere() {
this.processStuff( inputObject )
.subscribe()
}
最后,请参阅正确的文档-Angular2使用RxJS v5,您提供的链接是针对RxJS v4的。v5的文档仍然不完整,但您可以在许多源文件中找到描述。
问题内容: 在我的node.js / Express.js应用程序中,我需要通过socket.io连接传递参数(请参见另一篇文章)。 在客户端,我有类似的东西: 编辑 在服务器端: 编辑 但是控制台中什么也没有。 还有另一种方法可以实现吗? 编辑2 这是客户端的完整代码: 以及服务器端的完整代码: 具有功能: 感谢你的帮助 问题答案: 就在这里。 1)就像参数一样,因此请替换为(如果您想传递多个参
问题 你希望将两个数组连接到一起。 解决方案 在 JavaScript 中,有两个标准方法可以用来连接数组。 第一种是使用 JavaScript 的数组方法 concat(): array1 = [1, 2, 3] array2 = [4, 5, 6] array3 = array1.concat array2 # => [1, 2, 3, 4, 5, 6] 需要指出的是 array1 没有被运算
问题内容: 我正在使用Postgres 9.3。 我有两个表 以及它们之间的关系。现在,我想创建一个视图,该视图除了T1的列外,还为T1中的每个记录提供一列,其中包含一个包含T2所有相关记录的主键ID的数组。如果T2中没有相关条目,则此列的相应字段应包含空值。 我的架构的抽象版本如下所示: 可以如下生成相应的样本数据: 到目前为止,我提出了以下查询: 这行得通。但是,可以简化吗? 可以在此处找到相
函数名称:连接数组 函数功能:连接数组 函数方法 str = table.concat (tb,sep,i, j) 参数 类型 必填 说明 tb table 是 待操作数组 sep string 是 分割的字符 i number 否 tb[i] 起点,默认值: 1 j number 否 tb[j] 终点,,默认值: #tb 返回值 类型 说明 str string 连接后的字符串 函数示例 tb
问题内容: 我正在尝试连接4个数组,一个1D形状的数组(78427,)和3个2D形状的数组(78427,375/81/103)。基本上,这是4个数组,具有78427个图像的特征,其中1D数组每个图像仅具有1个值。 我尝试串联数组,如下所示: 这将导致以下错误: 追溯(最近一次调用):文件“”,第1行,在ValueError中:所有输入数组的维数必须相同 问题似乎是一维数组,但是我真的看不出来为什么
当我添加一个左连接来获取外部表的计数时,它将我其他左连接表的总和值与计数相乘,我也不能在这里使用不同的总和,因为两个值可以是相同的: