#angular
Вопрос:
У меня есть эта функция :
onSubmit() {
this.http.getDataFromServer('api/all').subscribe(resp => {
console.log(resp.data)
})
this.http.postDataToServer('api/in', this.companyForm.value).subscribe(() => {
//show that organization is added in dialog
this.dialog.open(DisplayPopupComponent, {
data: {
title: "Organization Updated Successfully!"
}
});
})
}
У нас есть данные resp.data
, я хочу использовать эти данные из этого запроса, чтобы проверить, равно нулю или нет, для реализации второго запроса.
График :
соотв.данные — — — — — > существуют данные? затем примените второй запрос (api/in).
-----> NULL data do nothing.
Комментарии:
1. Вы можете назвать свою вторую подписку в своей подписке на первую. Или используйте операторы RXJS , такие как
pipe
иmap
для достижения этого результата2. Как я это делаю в своем примере? @DTul
Ответ №1:
Я думаю, вам нужно использовать switchMap
.
Вот пример:
onSubmit() {
this.http.getDataFromServer('api/all').pipe(
switchMap(resp => {
if (resp.data) {
return this.http.postDataToServer('api/in', this.companyForm.value);
}
})
).subscribe(() => {
//show that organization is added in dialog
this.dialog.open(DisplayPopupComponent, {
data: {
title: "Organization Updated Successfully!"
}
});
});
}
Комментарии:
1. Другой вопрос, если я хочу получить «идентификатор» из соответствующих данных, обратите внимание, что данные, возвращаемые json, включают «идентификатор», для использования в другом методе в том же компоненте.ts, как это сделать ? @oz1985oz
2. Вы можете использовать
tap
метод. Например, вы можете добавить строку передswitchMap
:tap(resp => this.id = resp.data.id),
Ответ №2:
Попробуйте сделать вот так:
onSubmit() {
this.http.getDataFromServer('api/all').subscribe(resp => {
console.log(resp.data)
this.someVariablename = resp.data
});
if(this.someVariablename == null) {
//do nothing
}else{
//do something
this.http.postDataToServer('api/in', this.companyForm.value).subscribe(() => {
//show that organization is added in dialog
this.dialog.open(DisplayPopupComponent, {
data: {
title: "Organization Updated Successfully!"
}
});
})
}
}
Комментарии:
1. Не работает неопределенное это.someVariablename. @Кишан
Ответ №3:
Вы можете создать функцию для postDataToServer и вызвать ее, если доступны соответствующие данные.
напр.
onSubmit() {
this.http.getDataFromServer('api/all').subscribe(resp => {
if(resp.data){
this.postDataToServer();
}
})
postDataToServer(){
this.http.postDataToServer('api/in', this.companyForm.value).subscribe(() => {
//show that organization is added in dialog
this.dialog.open(DisplayPopupComponent, {
data: {
title: "Organization Updated Successfully!"
}
});
})
}