2017-09-24 21 views
1

這裏,我在下面的代碼中顯示錯誤,因爲我想返回promise,但在返回的promise中收到錯誤。如何回覆諾言?ionic2/angular2中的代碼錯誤

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

實際的錯誤是什麼?甚至是什麼問題? –

+0

@Lazar,正如我上面提到的那樣,它在回覆諾言時產生了錯誤。 –

回答

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語句它會告訴打字稿編譯器隱式承擔正確的返回類型,即Promise<void>而不是Promise<any>,因爲在將此Promise分配給無類型const promise時會發生這種情況。

希望我能夠擺脫一些光。詳細瞭解here的打字稿類型。

+0

謝謝,但是我上面提到的同一段代碼在教程中運行時沒有任何錯誤,但無法確定它爲什麼會在我的情況下產生錯誤。 –

+0

編輯我的答案以釋放更多的光線。 –