Как вы «получаете» обещание от интерфейса или содержания обещания? - PullRequest
0 голосов
/ 08 мая 2018

Я задаю этот вопрос, потому что я не понимаю объяснения, приведенного к вопросам, которые я искал, поэтому эта проблема, вероятно, встречается довольно часто. Я использую код другого человека, чтобы попытаться узнать, как он работает, чтобы повторить его. В одном из методов для инъекций оригинальный автор возвращает обещание, и я пытаюсь получить «внутренности» обещания от метода, в который оно было введено.

Я отправлю код: Это авторский код

getLists(){ 
    return this.isReady()
    .then(()=>{
      return this.database.executeSql("SELECT * from list", [])
      .then((data)=>{
        let lists = [];
        for(let i=0; i<data.rows.length; i++){
          lists.push(data.rows.item(i));
          console.log(i);
        }
        return lists;
      })
    })}

и вот что я более или менее делаю, но не работает, потому что типы не совпадают (строка [] не совпадает с Promise)

`

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { DatabaseService } from '../../app/database-service';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html',
  providers:[DatabaseService],
})
export class HomePage {
  listas:string[];

  constructor(public navCtrl: NavController, private service:DatabaseService ) {


  }
  getLists(){
  this.listas=this.service.getLists();
  }
  getList(){
    this.service.getList(0);
  }
  addList(){
    this.service.addList("Shazam");
  }
  deleteList(){
    this.service.deleteList(0);
  }

}`

Спасибо за ваше терпение и понимание.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Просто для вашего дальнейшего понимания причина, по которой у вас есть обещание, а не список, заключается в том, что функция Promise.then возвращает обещание.

В возвращении функции getLists () вы возвращаете this.isReady (). Then (), которое возвращает обещание вызывающей стороне.

Остальная часть этого кода является лишь модификацией того, что возвращается в этом обещании, а не самого обещания.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

Также обещание ожидает возвращенных обещаний, чтобы разрешить их, прежде чем перейти к следующему then () ... ex: (также из-за лямбда-синтаксиса, который будет работать только в chrome)

getPromise().then(a => console.log('a', a));

function getPromise() {
    return new Promise((res, rej) => {
        res(1);
    }).then(b => {
        console.log('b', b);
        return new Promise((res, rej) => {
            setTimeout(() => res(2), 3000);
        })
    }).then(c => {
        console.log('c', c);
        return new Promise((res, rej) => {
            setTimeout(() => res(3), 3000);
        })
    });
}
0 голосов
/ 08 мая 2018

Просто установите listas, когда данные будут готовы:

 getLists(){
   this.service.getLists().then(lists => this.listas = lists);
  }

Или используя другой синтаксис:

 async getLists(){
   this.listas = await this.service.getLists();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...