Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在我的角度分量中消耗我的承诺_Angular_Typescript_Asynchronous_Promise - Fatal编程技术网

Angular 在我的角度分量中消耗我的承诺

Angular 在我的角度分量中消耗我的承诺,angular,typescript,asynchronous,promise,Angular,Typescript,Asynchronous,Promise,在我的angular服务中,我有一个方法可以进行AJAX调用并返回一个承诺(在本例中我不使用Observable)。方法如下所示: @Injectable() export class InnerGridService { ... private results: Object[]; constructor(private logService: LogService, private http: Http) { ... this.results = [

在我的angular服务中,我有一个方法可以进行AJAX调用并返回一个承诺(在本例中我不使用Observable)。方法如下所示:

@Injectable()
export class InnerGridService {
...
    private results: Object[];

    constructor(private logService: LogService, private http: Http) {
      ...
      this.results = [];
    }
    loadAccountList() {
        let promise = new Promise((resolve, reject) => {
            this.http.get(`${this.baseUrl}`)
                .toPromise()
                .then(
                    res => {
                        this.results = res.json().results;
                        resolve();
                    },
                    msg => {
                        reject(msg);
                    }
                );
        });
        return promise;
    }
}
我试图在组件中使用此promise对象,方法是将其分配给如下变量:

export class ClientListRowDetailsComponent implements ICellRendererAngularComp {

    promiseRowData: any[];
    constructor(private innergridService: InnerGridService) {
    }

    ngOnInit(): void {
       ...
       // my JSON array from promise
       this.promiseRowData = this.innergridService.loadAccountListPromise();
    }
}
现在在我的组件中有一个对象
[object Promise]
,但我想知道在我的角度组件中使用这个对象的正确方式是什么?如果它是一个可观察的,我会通过做以下事情来同意它:

this.responseObject$.subscribe(( response: ResponseObject) => {...}

我想知道在我的组件中使用承诺的最佳方式是什么。

在调用
resolve
时,应该添加
res.json().results
作为参数,如下所示:
resolve(res.json().results)

然后,当您得到承诺时,对其调用
。然后()

this.innergridService.loadAccountList()
    .then(result => this.promiseRowData = result);
或者您可以利用
async/await
语法:

async loadAccountList() {
    return new Promise((resolve, reject) => {
        this.http.get(`${this.baseUrl}`)
            .toPromise()
            .then(
                res => {
                    this.results = res.json().results;
                    resolve(res.json().results);
                },
                msg => {
                    reject(msg);
                }
            );
    });

}
在您的组件中:

async ngOnInit(): void {
    ...
    // my JSON array from promise
    this.promiseRowData = await this.innergridService.loadAccountList();
}

调用
resolve
时,应该添加
res.json().results
作为参数,如下所示:
resolve(res.json().results)

然后,当您得到承诺时,对其调用
。然后()

this.innergridService.loadAccountList()
    .then(result => this.promiseRowData = result);
或者您可以利用
async/await
语法:

async loadAccountList() {
    return new Promise((resolve, reject) => {
        this.http.get(`${this.baseUrl}`)
            .toPromise()
            .then(
                res => {
                    this.results = res.json().results;
                    resolve(res.json().results);
                },
                msg => {
                    reject(msg);
                }
            );
    });

}
在您的组件中:

async ngOnInit(): void {
    ...
    // my JSON array from promise
    this.promiseRowData = await this.innergridService.loadAccountList();
}

你为什么要用承诺?强烈建议你用可观察的来代替角度。是的,我知道,但对于我无法控制的情况,我需要使用承诺…为什么你必须使用承诺?强烈建议您使用Observable代替Angular。是的,我知道,但对于我无法控制的情况,我需要使用Promise…哦,有趣,但只是一个澄清…代码
this.innergridService.loadAccountList()
。然后(结果=>this.promiseRowData=result)。那是在我的组件中吗?我想我是用
this.promiseRowData=wait this.innergridService.loadAccountList()调用它的组件中的是。这两者基本相同,只是语法不同(async/await基本上是处理返回承诺的函数的语法糖,因此您的代码看起来更像经典的同步代码,更具可读性)。我想你会建议用关键字wait来称呼它,因为它更容易阅读?而不是经典的。那么?是的,如果您编写新代码,最好使用async/await语法。哦,很有趣,但只是澄清一下……代码
this.innergridService.loadAccountList()
。然后(result=>this.promiseRowData=result)。那是在我的组件中吗?我想我是用
this.promiseRowData=wait this.innergridService.loadAccountList()调用它的组件中的是。这两者基本相同,只是语法不同(async/await基本上是处理返回承诺的函数的语法糖,因此您的代码看起来更像经典的同步代码,更具可读性)。我想你会建议用关键字wait来称呼它,因为它更容易阅读?是的,如果您编写新代码,最好使用异步/等待语法。