在这里,我在下面的代码中收到错误,因为我想要返回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.
}
}
答案 0 :(得分:2)
更改ionViewCanLeave(): boolean | Promise<void> {
到此。
ionViewCanLeave(): boolean | Promise<any> {
基本上,Promise<void>
在您的情况下不等于Promise
。 (你回来了)。因此,更改承诺的<T>
以使用any
作为通用值。
void
不等于any
的原因是void
本质上意味着缺少类型,而any
表示任何类型。可以将undefined
和null
分配给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中有关打字稿类型的更多信息。