在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
Run Code Online (Sandbox Code Playgroud)
我的功能的剪切版本如下:
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();
});
});
}
Run Code Online (Sandbox Code Playgroud)
我的问题的根与循环结束有关,然后按此处的要求继续:Angular2 Observable - 如何在循环之前等待循环中的所有函数调用结束?
但我还没有完全掌握forkJoin与数组的正确用法以及正确的语法.
我非常感谢您提供的帮助.
thirdFunction() {
let _self = this;
return Observable.create((observer) => {
// return new Observable(function(observer) {
...
observer.next(responseargs);
observer.complete();
});
}
processStuff(inputObject) …Run Code Online (Sandbox Code Playgroud) 我在教程中找到了这个示例代码:
getRandomQuote() {
this.http.get('http://localhost:3001/api/random-quote')
.map(res => res.text())
.subscribe(
data => this.randomQuote = data,
err => this.logError(err),
() => console.log('Random Quote Complete')
);
}
Run Code Online (Sandbox Code Playgroud)
但是当试图使用它时,我只得到TypeError: this.http.get(...).map is not a function in [null]:
getChannels():Promise<Channel> {
return this.http.get('...')
.map(function (response:Response) {
...
}).toPromise();
}
Run Code Online (Sandbox Code Playgroud)
我的Typescript编译器告诉我这些方法是可用的,但是当检查http.get()它们的返回值时,它们就丢失了.
我使用了当前angualar2入门指南的package.json:
"dependencies": {
"angular2": "2.0.0-beta.0",
"systemjs": "0.19.6",
"es6-promise": "^3.0.2",
"es6-shim": "^0.33.3",
"reflect-metadata": "0.1.2",
"rxjs": "5.0.0-beta.0",
"zone.js": "0.5.10"
},
Run Code Online (Sandbox Code Playgroud)
...
<script src="node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="node_modules/angular2/bundles/http.dev.js"></script>
Run Code Online (Sandbox Code Playgroud)
在这一点上我有什么想法可能会出错?
想要将以下服务转换为Angular 2服务.我在这里使用谷歌api.我得到的主要问题是返回Promise,因为它与Angular 1.x不相似.
getLoginStatus: function () {
var deferred = $q.defer();
gapi.auth.authorize({client_id: dataStore.getData('CLIENT_ID'), scope: dataStore.getData('SCOPES'), immediate: true},function(response){
var res = {};
res = response;
deferred.resolve(res);
});
return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)