2016-09-30 39 views
7

Tôi tự làm quen với Angular2, Ionic2 và có thể tôi hiểu nhầm điều gì đó nhưng đã hy vọng được trợ giúp.Trả lại giá trị hứa hẹn trong Angular 2, Ionic 2

Tôi có một nhà cung cấp được gọi là 'CurrentUser' với mục đích lưu trữ và nhận dữ liệu LocalStorage.

 getProfile(): any { 
     this.local.get("user-profile").then((profile) => { 
     var val = JSON.parse(profile); 
     return val; 
    }); 
} 

chức năng này getProfile() trả về một lời hứa

Nếu tôi tiêm cung cấp dịch vụ này thành một thành phần. Làm thế nào tôi sẽ chờ đợi lời hứa để giải quyết trước khi gán dữ liệu khi gọi chức năng này từ thành phần ?.

@Component({ 
    templateUrl: 'build/pages/book_meeting/book_meeting.html' 
}) 
export class BookMeetingPage implements OnInit { 
constructor(public navCtrl: NavController, private _currentUser: CurrentUser) { 
} 

profile: IProfile; 

    ngOnInit(): any { 
    this.profile = this._currentUser.getProfile(); 
    console.log(this.profile);//returns undefined 
    } 
} 

Trả lời

9

Trước hết bạn phải trả lại this.local.get("user-profile") lời hứa từ getProfile chức năng để nó có thể chuỗi khi bạn gọi. Sau đó, bạn có thể nhận dữ liệu được trả lại từ hàm getProfile trong .then gọi lại thành công.

getProfile(): any { 
    return this.local.get("user-profile").then((profile) => { 
     var val = JSON.parse(profile); 
     return val; 
    }); 
); 

Ngoài ra bạn không thể nhận được dữ liệu ngay khi bạn thực hiện một ajax, trên thành công của nó, bạn có thể nhận được câu trả lời

ngOnInit(): any { 
    this._currentUser.getProfile().then(
    value => { console.log(value) } 
    ) 
} 
+0

Chào bạn, tôi nhận được app.bundle.js lỗi: 44529 EXCEPTION: Lỗi: Uncaught (trong lời hứa): TypeError: Không thể đọc thuộc tính 'then' khi không xác định. – Arianule

+0

@Arianule xin lỗi tôi đã đề cập trong câu trả lời, nhưng quên thay đổi cùng một điều trong phần mã, xấu của tôi. Cảm ơn bạn đã đứng đầu. Kiểm tra mã cập nhật –

+0

Xin chào Pankaj. Bạn đã cập nhật mã, xin lỗi. nên tôi trả lại một Promise ... một cái gì đó dọc theo dòng trở lại Promise.resolve (val)? – Arianule

0

Hàm getProfile của bạn không trả về lời hứa. Nó không trả lại gì cả. Bạn nên thay đổi nó để

getProfile(): any { 
    return this.local.get("user-profile").then((profile) => { 
    var val = JSON.parse(profile); 
    return val; 
}); 

Bây giờ trong thành phần của bạn, bạn có thể trích xuất các dữ liệu từ biến hồ sơ lời hứa của mình.

ngOnInit(): any { 
    this._currentUser.getProfile().then(value => { 
     console.log(value); //returns your value. 
    } 
Các vấn đề liên quan