Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.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
Javascript 数组仅在第0个索引中添加_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 数组仅在第0个索引中添加

Javascript 数组仅在第0个索引中添加,javascript,angular,typescript,Javascript,Angular,Typescript,我正在编写一个函数,其中需要将元素添加到数组中。我正在从数据库中获取数据。将元素添加到其中时,所有元素仅添加到rowData的数组[0]中 private createRowData() { var rowData:any[] = []; this.wakanda.catalog.then(ds => { ds.Group.query({select : 'groupName'}).then(op => {

我正在编写一个函数,其中需要将元素添加到数组中。我正在从数据库中获取数据。将元素添加到其中时,所有元素仅添加到rowData的数组[0]中

private createRowData() {
        var rowData:any[] = [];
        this.wakanda.catalog.then(ds => {
            ds.Group.query({select : 'groupName'}).then(op => {
                for(let entity of op['entities']){
                    rowData.push(
                    {row : entity.groupName});
                }
            });
        });
        return rowData;
    }
我的输出是这样的

我需要这样的东西

我该如何解决它

提前谢谢

在上面的函数中,您使用的是异步DB调用,然后在不等待结果的情况下发送响应

因此,在本例中,您将获得rowData.length

在回调响应之后发送结果

试试这个:

    private createRowData() {
        return new Promise((resolve, reject) => {
            var rowData: any[] = [];
            this.wakanda.catalog.then(ds => {
                ds.Group.query({ select: 'groupName' }).then(op => {
                    for (let entity of op['entities']) {
                        rowData.push({ row: entity.groupName });
                    }
                    resolve(rowData); // Send result from here
                });
            }).catch(reject);
        })
    }

这一行在我看来是可疑的:
var rowData:any[]=[]。尝试删除
var
。一切都很好,您只是在承诺结束之前记录了数据。chrome向你展示了一个空数组,但是既然你扩展了它,承诺就完成了,所以chrome填充了它。我尝试删除了var,但仍然得到了相同的错误。它返回了我期望的值,但是如何终止承诺,因为代码在returnit之后冻结了。当我将代码更改为你的新更新代码时,它生成了错误,我发现问题在于代码中发生的asyc调用,它在实际拥有数据之前返回值。我通过在return语句之后进行函数调用来修复它