2017-02-22 20 views
-1

Я пишу функцию, в которой мне нужно добавить элементы в массив. Я получаю данные из моей базы данных. При добавлении элемента в него все элементы добавляются только в Массив [0] rowData.Array добавляются только в 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; 
    } 

Мой выход как этот

enter image description here

мне нужно что-то вроде этого

enter image description here

Как я это решаю

Заранее спасибо

+0

Эта линия выглядит подозреваемого мне: 'вар ROWDATA: любой [] = [];'. Попробуйте удалить «var». –

+6

Все хорошо, вы просто регистрируете свои данные до конца обещания. Итак, хром показывает вам пустой массив, но поскольку вы тратите его, обещание делается так, чтобы хром заполнил его. –

+0

Я попытался удалить var, но все равно получить ту же ошибку – skid

ответ

1

В приведенной выше функции вы используете вызов БД, который является асинхронным, и затем вы отправляете ответ, не дожидаясь результата.

Таким образом, в этом случае вы получите rowData.length 0.

отправить результат после ответа обратного вызова.

попробовать это:

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); 
     }) 
    } 
+0

вернуть значение, как я ожидаю, но как прекратить обещание, так как код зависает после возврата – skid

+0

Использовать return before ds.Group Посмотрите обновленный –

+0

он генерирует ошибку когда я меняю свой код на новый обновленный, я понял, что проблема связана с вызовом asyc, который происходит в коде, который возвращает значение, прежде чем он действительно будет иметь данные. – skid