标签: subscribe

Angular 5 - 最后在订阅时实现

我正在用 Angular 5 编写一个应用程序。

我正在使用离子刷新器来刷新页面,如果出现错误或成功返回,我想取消微调器,因此基本上是一个 finally 块。

我需要刷新以停止旋转并在任何结果(成功或错误)中返回到默认位置。

我怎样才能用我的代码实现这一点?这是我尝试过的,但出现错误:

html

<ion-content>
    <ion-refresher slot="fixed" (ionRefresh)="refresh($event)"></ion-refresher>
        <div *ngIf="data">
         {{ data }}
        </div>
</ion-content>
Run Code Online (Sandbox Code Playgroud)

成分

export class UserInfoComponent implements OnInit {

    data: any;

    constructor(private userInfoService: UserInfoService) {}

    ngOnInit() {

        this.userInfoService
            .getEmployeeInfo()
            .subscribe((response) => {
              this.data = response;
            });
    }

    refresh(event) {

        this.userInfoService
            .getEmployeeInfo()
            //.pipe(
              //.finally(() => event.complete())
            //)
            .subscribe((response) => {
              this.data = response;
              event.complete(); //this works but what if there was an error
            })
            //.finally(() => event.complete());
            //Property 'finally' does not exist …
Run Code Online (Sandbox Code Playgroud)

refresh subscribe angular

1
推荐指数
1
解决办法
5716
查看次数

订阅方法多次调用Angular 5

我在ngOnInitcontroller.ts 中订阅了一种方法。从视图中,有一个选项可以从列表中选择不同的用户,这些用户重定向到同一页面,只是 URL 中的 ID 发生了变化。因此ngOnInit被多次调用。因此方法被多次订阅。我们多次选择不同的用户方法被调用为每个选择的成员数量,即如果我们选择 3 个用户一个接一个的路由被更改 3 次因此当 observable 获得结果时方法被调用 3 次。但是如果我们刷新页面一切正常。但是如果我使用 unsubscribe inngDestroy那么它就不会在ngOnInit. 有什么解决办法吗。

 ngOnInit() { 
    this._myService.detailsReceived.subscribe((obj: details) => 
       {console.log(obj.text)}
    );
 }
Run Code Online (Sandbox Code Playgroud)

同一页面上的路线变化是

this.route.navigate(['user-home', userid]);
Run Code Online (Sandbox Code Playgroud)

我需要这种方法保持订阅直到用户注销,因此不能使用 subscribe.Take(1)

subscribe observable angular2-routing angular angular5

1
推荐指数
1
解决办法
8366
查看次数

为什么 C# Rx Subscribe() 函数不适用于“async”关键字?

我有这个代码片段:

static void Main(string[] args)
{
    Observable.Range(1, 5).Subscribe(async x => await DoTheThing(x));
    Console.WriteLine("done");
}

static async Task DoTheThing(int x)
{
    await Task.Delay(TimeSpan.FromSeconds(x));
    Console.WriteLine(x);
}
Run Code Online (Sandbox Code Playgroud)

我希望它会循环 5 次,每次循环后都会有一行打印为

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

但令人惊讶的是,这将打印“完成”并立即终止。似乎 async+await 没有等待 Task.Delay 并退出。

语义似乎没有问题,那么我在 Subscribe 或 async 哪里出错了,如何修复它以满足我从 Rx 调用异步任务的请求?

谢谢。

c# asynchronous subscribe system.reactive async-await

1
推荐指数
1
解决办法
280
查看次数

在 Angular 中使用 .pipe() 和 .subscribe() 时的控制流程

在这种情况下,我对代码流有点困惑。请参考下面的代码。

import { fromEvent } from 'rxjs';
import { mapTo } from 'rxjs/operators';

let btn = document.getElementById("btnclick");
let btn_clicks = fromEvent(btn, 'click');
let positions = btn_clicks.pipe(mapTo ("Testing MapTo"));
positions.subscribe(x => console.log(x));
Run Code Online (Sandbox Code Playgroud)

Testing MapTo当我单击按钮时它会输出。一开始我认为每当按钮点击发生时,该.pipe()方法被调用,然后该.subscribe()方法被调用导致它在控制台中输出。然而我读到,

subscribe is for activating the observable and listening for emitted values
Run Code Online (Sandbox Code Playgroud)

链接中

问题:

  1. 由于 .subscribe() 是在 .pipe() 之后调用的,它是如何工作的?我的意思是只有在 .subscribe() 之后它才得到值,那么它是如何通过 .pipe() 的?请帮助我理解这一点。
  2. 当我们像这样进行 http 调用时会发生什么(假设返回的 obeservable 是 x ):
this.http.get('url')
    .pipe(
      filter(x => x % 2 === 0), …
Run Code Online (Sandbox Code Playgroud)

pipe subscribe observable rxjs angular

1
推荐指数
1
解决办法
659
查看次数

将表达式转换为 lambda

任何人都可以帮助我将这段代码转换为 lambda 表达式,我对此感到震惊

Observable.create(new OnSubscribe<User>() {
        @Override
        public void call(Subscriber<? super User> arg0) {
            User updatedUser = userService.updateuser(usermapper.userdtotoentity(user));
            arg0.onNext(updatedUser);
        }
    }).subscribe(new Action1<User>() {
        @Override
        public void call(User user) {
            if (user != null) {
                response.resume(user);
            } else
                response.resume(Response.status(Status.NOT_FOUND).build());
        }
    }, new Action1<Throwable>() {
        @Override
        public void call(Throwable t) {
            logger.debug("User with email_id:" + email_id + " is not present");
            response.resume(t);
        }
    });
Run Code Online (Sandbox Code Playgroud)

lambda throwable subscribe observable rx-java

0
推荐指数
1
解决办法
3381
查看次数

等到函数完成并返回 Angular 6

我怎样才能subscribe等到我的逻辑完成并transform返回更新的keys对象?

transform(value: any, args:string) : any {
    let keys = [];

    this.http.get('src/app/enum-data/enum.json').subscribe(data => {

      this.List = data;
      // Logic here (data vs value)
      for (var enumMember in value) {
        if (!isNaN(parseInt(enumMember, 10))) {
          keys.push({key: enumMember, value: value[enumMember]});
        } 
      }
    },
      err => {
        console.log(err);
      });

    return keys;

  }
Run Code Online (Sandbox Code Playgroud)

HTML:

  <select>
          <option *ngFor="let item of gendersEnum | keys: 'gender'" [value]="item.key">{{item.value}}</option>
  </select>
Run Code Online (Sandbox Code Playgroud)

这是一个pipe模块。尝试返回keyssubscribe但仍然是同样的问题。

subscribe observable typescript angular

0
推荐指数
1
解决办法
1451
查看次数

使用 jasmine 进行 Angular Observable 错误部分单元测试

我的角度服务“config.service.ts”中有以下功能。我已经为此编写了一些单元测试用例,但无法覆盖订阅方法的错误部分。

getConfiguration(params){
  return new Promise((resolve, reject) => {
    try {
      this.httpService.post('getConfig', params).subscribe{
        data => {
         resolve(data);
        },
        error => {
         reject(error);
        }
      };
    } catch(error) {
     reject(error);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

以下是“config.service.spec.ts”代码。请让我知道如何覆盖相同的订阅错误部分。

it('coverage for getConfiguration()', () => {
 const service: ConfigService = Testbed.get(ConfigService);
 const param = {id: 10};
 const response = {success: true};
 const httpService: HttpService = Testbed.get(HttpService);
 spyOn(httpService, 'post').and.returnValue(of(response));
 service.getConfiguration(param).then(function() {});
 expect(service.getConfiguration).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)

这里可观察误差部分没有被覆盖,无法达到覆盖范围。如果这里有什么不对的地方请指正。

subscribe observable karma-jasmine angular

0
推荐指数
1
解决办法
6218
查看次数