我正在用 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) 我在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)
我有这个代码片段:
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 调用异步任务的请求?
谢谢。
在这种情况下,我对代码流有点困惑。请参考下面的代码。
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)
在链接中。
问题:
this.http.get('url')
.pipe(
filter(x => x % 2 === 0), …Run Code Online (Sandbox Code Playgroud) 任何人都可以帮助我将这段代码转换为 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) 我怎样才能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模块。尝试返回keys,subscribe但仍然是同样的问题。
我的角度服务“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 ×7
angular ×5
observable ×5
angular5 ×1
async-await ×1
asynchronous ×1
c# ×1
lambda ×1
pipe ×1
refresh ×1
rx-java ×1
rxjs ×1
throwable ×1
typescript ×1