有人可以给出一个明确的定义以及一个简单的例子来解释什么是不知道JavaScript和node.js的人的"回调地狱"?
何时(在什么样的设置中)出现"回调地狱问题"?
它为什么会发生?
"回调地狱"总是与异步计算有关吗?
或者也可以在单线程应用程序中发生"回调地狱"?
我参加了Coursera的Reactive课程,Erik Meijer在他的一个讲座中说RX解决了"回调地狱"的问题.我问在Coursera论坛上什么是"回调地狱",但我没有得到明确答案.
在一个简单的例子中解释"回调地狱"之后,你能否展示RX如何在这个简单的例子中解决"回调地狱问题"?
javascript callback reactive-programming language-lawyer rxjs
我知道Redux是Flux的一个更好的"实现",或者更好地说它是一个简化事物(应用程序状态管理)的重新设计.
我听过很多关于反应式编程(RxJS)的内容,但我还没有去学习它.
所以我的问题是:这两种技术之间是否存在任何交集(任何共同点)或它们是互补的?......还是完全不同?
我有一个具有此方法的服务:
export class TestModelService {
public testModel: TestModel;
constructor( @Inject(Http) public http: Http) {
}
public fetchModel(uuid: string = undefined): Observable<string> {
if(!uuid) {
//return Observable of JSON.stringify(new TestModel());
}
else {
return this.http.get("http://localhost:8080/myapp/api/model/" + uuid)
.map(res => res.text());
}
}
}
Run Code Online (Sandbox Code Playgroud)
在组件的构造函数中,我订阅如下:
export class MyComponent {
testModel: TestModel;
testModelService: TestModelService;
constructor(@Inject(TestModelService) testModelService) {
this.testModelService = testModelService;
testService.fetchModel("29f4fddc-155a-4f26-9db6-5a431ecd5d44").subscribe(
data => { this.testModel = FactModel.fromJson(JSON.parse(data)); },
err => console.log(err)
);
}
}
Run Code Online (Sandbox Code Playgroud)
如果一个对象来自服务器,但是我试图创建一个可以使用给定subscribe()的静态字符串调用的observable (当testModelService.fetchModel()没有收到uuid 时会发生这种情况),这样就可以了.所以在这两种情况下都有无缝处理.
我发现使用Auth Guards的实现很少AuthGuard.在我的项目中,我曾经take(1)满足我的需求.它的工作方式是否相同?或者其中一个可能有优势.
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/first';
import { Observable } from 'rxjs/Observable';
import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { AngularFire } from 'angularfire2';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private angularFire: AngularFire, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
return this.angularFire.auth.map(
(auth) => {
if (auth) {
this.router.navigate(['/dashboard']);
return false;
} else {
return true;
}
}
).first(); // …Run Code Online (Sandbox Code Playgroud) 在过去的4年里,我在与AngularJS 1.*一起工作之后,我正在尝试自学Angular2和TypeScript!我不得不承认我讨厌它,但我确信我的尤里卡时刻即将到来......无论如何,我已经在我的虚拟应用程序中编写了一个服务,它将从我写的服务JSON的虚拟后端获取http数据.
import {Injectable} from 'angular2/core';
import {Http, Headers, Response} from 'angular2/http';
import {Observable} from 'rxjs';
@Injectable()
export class UserData {
constructor(public http: Http) {
}
getUserStatus(): any {
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.get('/restservice/userstatus', {headers: headers})
.map((data: any) => data.json())
.catch(this.handleError);
}
getUserInfo(): any {
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.get('/restservice/profile/info', {headers: headers})
.map((data: any) => data.json())
.catch(this.handleError);
}
getUserPhotos(myId): any {
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.get(`restservice/profile/pictures/overview/${ myId }`, …Run Code Online (Sandbox Code Playgroud) 我一直在寻找那些3:
主题,行为主体和重播主题.我想使用它们,知道何时以及为什么,使用它们有什么好处,虽然我已阅读文档,观看教程和搜索谷歌,但我没有对此有任何意义.
那他们的目的是什么?一个真实的案例将是非常感谢它甚至不必编码.
我更喜欢一个干净的解释,而不只是"a + b => c,你订阅了......"
谢谢
javascript reactive-programming rxjs angular2-observables angular
我从本教程中提取了示例模板代码,并按以下两个步骤开始 -
npm install // worked fine and created node_modules folder with all dependenciesnpm start
//因以下错误而失败 -
node_modules/rxjs/Subject.d.ts(16,22): error TS2415: Class 'Subject<T>'
incorrectly extends base class 'Observable<T>'.
Types of property 'lift' are incompatible.
Type '<T, R>(operator: Operator<T, R>) => Observable<T>' is not assignable
to type '<R>(operator: Operator<T, R>) => Observable<R>'.
Type 'Observable<T>' is not assignable to type 'Observable<R>'.
Type 'T' is not assignable to type 'R'.
npm ERR! code ELIFECYCLE
npm ERR! errno 2
Run Code Online (Sandbox Code Playgroud)我在主题中看到.d.ts电梯声明如下 -
lift<T, …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的 angular 9 应用程序升级到 angular 10 版本,但在升级后低于警告
rxjs\BehaviorSubject.js depends on rxjs-compat/BehaviorSubject
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
根据这个artcle,onComplete和onError功能subscribe是互斥的.
任何意义onError或onComplete事件将在我的事件中激起subscribe.
我有一个逻辑块,无论是否收到错误都需要执行,或者我成功完成了大量的信息.
我finally在python中查找类似的内容,但我发现的只是finally需要附加到我创建的可观察对象上.
但是我想在我订阅时,在流结束后,无论是成功还是出错,都要做这个逻辑.
有任何想法吗?
管道是用于转换模板中的数据(格式)的过滤器.
我遇到了pipe()如下功能.pipe()在这种情况下,这个功能究竟意味着什么?
return this.http.get<Hero>(url)
.pipe(
tap(_ => this.log(`fetched hero id=${id}`)),
catchError(this.handleError<Hero>(`getHero id=${id}`))
);
Run Code Online (Sandbox Code Playgroud) rxjs ×10
angular ×7
javascript ×5
typescript ×3
observable ×2
callback ×1
promise ×1
redux ×1
rxjs5 ×1
rxjs6 ×1