ionic2 / angular2中的代码出错

时间:2017-09-24 18:32:41

标签: angular ionic2

在这里,我在下面的代码中收到错误,因为我想要返回promise,但在返回promise时收到错误。如何归还承诺?

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { UsersPage } from '../users/users';
import { ShopPage } from '../shop/shop';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
usrPage = UsersPage;
  constructor(public navCtrl: NavController) {}
  onGoToUsers(){
    this.navCtrl.push(this.usrPage)
    .catch((error)=> console.log('Access Denied, Argument was' + error));
  }

  ionViewCanLeave(): boolean | Promise<void> {
    const promise = new Promise((resolve, reject) => {
      setTimeout(()=>{
        resolve()
      }, 1000);
    });
    return promise;   // the line is producing error in returning promise.
  }

}

1 个答案:

答案 0 :(得分:2)

更改ionViewCanLeave(): boolean | Promise<void> {

到此。

ionViewCanLeave(): boolean | Promise<any> {

基本上,Promise<void>在您的情况下不等于Promise。 (你回来了)。因此,更改承诺的<T>以使用any作为通用值。

void不等于any的原因是void本质上意味着缺少类型,而any表示任何类型。可以将undefinednull分配给void类型变量。

const promise = new Promise...隐式声明变量类型,因为在promise声明后没有给出类型,所以它假定它是Promise<any>
因此,如果你写const promise: Promise<void>,它也会有效。

另一种可行的方法是直接返回Promise :(也许您所遵循的教程显示了这样的函数?)

return new Promise((resolve, reject) => {
   //
});

由于这是一个return语句,它会告诉typescript编译器隐式假设正确的返回类型Promise<void>而不是Promise<any>,因为当你将此Promise分配给无类型{{1}时会发生这种情况。 }}。

希望我能够解释一下。阅读here中有关打字稿类型的更多信息。