IonViewDidEnter“承诺”离子2

时间:2017-04-28 13:23:17

标签: ionic-framework promise ionic2

我正在尝试在ionViewDidEnter中加载3个方法,但总是在this.carregacarrinho()运行后没有第一个方法。为什么?

ionViewDidEnter() {


this.carregaCarrinho()
  .then((data) => {
    console.log("ok");
  }, (error) => {
    this.database.presentToast("Não foi possível carregar o carrinho");
  })

  this.database.buscaTipoeCliente()
      .then((data) => {
        this.tipovenda = data[0].tipovenda;
        this.cliente = data[0].cliente;
        this.codigo = data[0].codigo;
        this.database.presentToast(this.tipovenda);
        this.database.presentToast(this.cliente);
        this.database.presentToast(this.codigo);
      }, (error) => {
        this.database.presentToast("Não possível carregar Condição de venda, cliente e código");
      })


  this.database.buscaUsuario()
  .then((user) => { 
    this.usuario = user;
    this.database.presentToast(this.usuario);
  });
    }

1 个答案:

答案 0 :(得分:0)

这不是使用promises的最佳方式,然后使用嵌套,如果发生错误,你可以看到它发生了什么。如果有一天你需要加载一些东西以在同一个函数中的另一个方法中使用它,它可能会有一些并发问题。这样做:

ionViewDidEnter() {
        this.carregaCarrinho()
            .then((data) => {
                console.log("ok");

                this.database.buscaTipoeCliente()
                    .then((data) => {
                        this.tipovenda = data[0].tipovenda;
                        this.cliente = data[0].cliente;
                        this.codigo = data[0].codigo;
                        this.database.presentToast(this.tipovenda);
                        this.database.presentToast(this.cliente);
                        this.database.presentToast(this.codigo);

                        this.database.buscaUsuario()
                            .then((user) => {
                                this.usuario = user;
                                this.database.presentToast(this.usuario);
                            });
                    }, (error) => {
                        this.database.presentToast("Não possível carregar Condição de venda, cliente e código");
                    })
            }, (error) => {
                this.database.presentToast("Não foi possível carregar o carrinho");
            })
    }

如果即使this.carregaCarrinho()失败也需要调用函数,然后调用错误回调。我知道代码我会更大,但它是您查看代码中是否存在错误的最佳方式。

只是一个提示:不知道是否在某处加载,但ionViewDidEnter仅在视图输入时执行(如名称所示),它不好让用户等待很多东西在屏幕上显示。所以加载或使用ionViewWillEnter()

希望这有帮助