NativeScript Как передать данные из сервиса в компонент? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть service, который создает метод HttpGet, и я хочу передать объект, который возвращается с сервера, в массив в Task component

Я знаю, что лучше использовать Promise, но я не очень знаком с ним.

Итак, это то, что я сделал до сих пор:

компонент:

userTaskList: Task[ ];

  this.data=this.taskService.getAllTasks()
    this.userTaskList.push(this.data);

услуга:

getAllTasks() {
    const req = this.http.get(`${this.serverUrl}/GetTasks`).toPromise().then(
        res => {
        console.log("success" , res);
    });
}

Я получаю объект в своем журнале.

success [{
JS:   "Id": 27,
JS:   "UserId": 12,
JS:   "Name": "Teeest",
JS:   "Description": "99",
JS:   "Latitude": 0,
JS:   "Longitude": 0,
JS:   "Radius": 99,
JS:   "Created": "2018-08-29T14:01:51.0272032+03:00",
JS:   "LastUpdate": "2018-08-29T14:01:51.0272032+03:00",
JS:   "IsActive": true
JS: }]

а как мне взять и отправить его компоненту? Я хочу сделать список объектов в userTaskList.

Спасибо !!

1 Ответ

0 голосов
/ 29 августа 2018

я знаю, что лучше использовать Promise, но я не настолько знаком с этим.

Нет. Не за что. Обещание не поддерживает, повторы, отклонения, карты переключения и т. д.

Не говоря уже о том, что http-запросы выполняются автоматически (rxjs POV)

В любом случае:

Измените свой код на:

компонент:

this.taskService.getAllTasks().toPromise().then((data)=> { this.userTaskList =  data});

Сервис:

getAllTasks() {
   return  this.http.get(`${this.serverUrl}/GetTasks`) ;
}

ИЛИ

async foo(){

let data = await  this.taskService.getAllTasks().toPromise() ;
this.userTaskList = data

}

Сервис должен предоставлять функциональность без вызова. Когда вы вызываете, вы получаете значение.

Кстати, я бы сделал это с Observable. Но я продолжил ваш пример.

Так что я бы использовал это:

 this.taskService.getAllTasks().subscribe((data)=> { this.userTaskList =  data});

 getAllTasks() {
       return  this.http.get(`${this.serverUrl}/GetTasks`) ;
    }
...