我只是想整理一下,但沒有運氣,如何理解這個async await promisse
。這個方法將被用來在更新操作之前呼叫一個對話材料。該對話框有一個訂閱,這就是我在這里使用這個async await的原因。
這是代碼:
async execute(task: ITask)。Promise<boolean> {
return new Promise((resolve) => {
this.confirmation.
.confirmDelete(`${task.id} - ${task.title}`)
.subscribe(async (confirmed) => {
if (confirmed) {
await this.repository.update(**<Task[]**> (task.id))。
this.dialogService
.openConfirmDialog('Are you really want to delete/update/create?')
.afterClosed()。
}
resolve(confirmed);
});
});
}
如何在<Task[]>
中傳遞一個物件?我很感激你的幫助
謝謝編輯:
這是 task.repository.ts
import { environment } from './././environments/environment'。
import { Injectable } from '@angular/core'/span>;
import { HttpClient } from '@angular/common/http'/span>。
import { ITask } from './models/itask';
@Injectable({
providedIn: 'root',
})
export class TaskRepository {
constructor(private httpClient: HttpClient) {}。
create(task: ITask)。Promise<ITask> {
return this.httpClient。
.post<ITask>(`${environment.api}/tasks`, task)
.toPromise()。
}
update(entity: ITask) 。Promise<ITask> {
const { id, ...data } = entity;
return this.httpClient.
.put<ITask>(`${environment.api}/tasks/${id}`, data)
.toPromise()。
}
getById(id: string)。Promise<ITask> {
return this.httpClient。
.get<ITask>(`${environment.api}/tasks/${id}`)
.toPromise()。
}
getAll()。Promise<ITask[]> {
return this.httpClient.
.get<ITask[]>(`${environment.api}/tasks/`)
.toPromise()。
}
async delete(id: string)。Promise<void> {
await this.httpClient。 delete(`${environment. api}/tasks/${id}`).toPromise()。
return。
}
更新2
使用任務作為引數,解決了問題,但在我的.ts組件上開始出現問題
import { ITask } from './././models/itask'。
import { GetTaskHandler } from './././business-rules/get-task.handler'。
import { UpdateTaskHandler } from './././business-rules/update-task.handler'。
import { CreateTaskHandler } from './././business-rules/create-task.handler'。
import { Component, OnInit } from '@angular/core'。
import { FormBuilder, FormControl } from '@angular/forms'。
import { ActivatedRoute } from '@angular/router'/span>;
@Component({
selector: 'app-task-form-page',
templateUrl: './task-form-page.component.html'。
styleUrls: ['./task-form-page.component.scss'] 。
})
export class TaskFormPageComponent 實作 OnInit {
pageTitle = 'Nova tarefa'。
//configura??o do formulário //configura??o do formulário
form = this.formBuild.group( {
title: [''/span>]。
description: ['']。
done: [false]。
});
get title()。FormControl {
return this.form。 get('title') as FormControl。
}
get description()。FormControl {
return this.form。 get('description') as FormControl。
}
get done()。FormControl {
return this.form。 get('done') as FormControl。
}
taskId: string | undefined = undefined;
constructor()
私有的formBuild。FormBuilder,
private activatedRouter: ActivatedRoute,
私有createTaskHandler。CreateTaskHandler。
private updateTaskHandler: UpdateTaskHandler。
私有的getTaskHandler。GetTaskHandler。
) {}
async ngOnInit()。Promise<void> {
const paramId = this.activatedRouter。 snapshot.paramMap.get('id')。
if (paramId) {
this.taskId = paramId;
await this.loadTask()。
}
}
async loadTask()。Promise<void> {
const response = await this.getTaskHandler. execute(this.taskId || ''/span>)。
if(回應) {
this.pageTitle = 'Editando tarefa'。
//用API檢索到的數值更新公式。
this.form.patchValue( {
title: response.title。
description: response.description,
done: response.done。
});
}
}
async onSubmit()。Promise<void> {
const taskToSave: ITask = {
...this.form.value, //pegando todos os valores do formulário.
id: this.taskId, //a update o id exista.
};
let response: ITask | undefined;
if (taskToSave.id){
***response*** = await this.updateTaskHandler.execute(taskToSave)。
} else {
response = await this.createTaskHandler.execute(taskToSave)。
}
if(回應) {
this.taskId = response.id。
}
}
uj5u.com熱心網友回復:
this.repository.update函式期望有哪些引數?
你可以在異步函式的任何地方使用task引數。
uj5u.com熱心網友回復:
我認為你犯了一個錯誤,更新需要ITask物件,所以await this.repository.update(**<Task[]**>(task.id));應該是await this.repository.update(task);另外我認為在一個承諾里面使用訂閱不是一個好主意。所以你可以試試這樣的做法
async execute(task: ITask)。Promise<boolean> {
//轉換為承諾。
const confirmed = await this.confirmation.
.confirmDelete(`${task.id} -${task. title}`).pipe(first()) .toPromise()。
if (confirmed) {
await this.repository.update(task)。
this.dialogService.openConfirmDialog('Are you really want to delete/update/create? /span>)
.afterClosed()。
}
return new Promise((resolve) => /span> {
resolve(確認)。
});
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/321042.html
標籤:
上一篇:關于文本區域的問題
