Tôi đang học về góc cạnh và Bản ghi loại.Cách triển khai mẫu không đồng bộ của Typescript chờ đợi: Lời hứa
Tôi có dịch vụ CustomerService trong dịch vụ này Tôi có phương pháp mà tôi muốn trả về một mảng khách hàng từ một dịch vụ RESTfull.
Ban đầu tôi đã tạo GetCustomers chức năng của tôi như sau:
public GetCustomers(): Dtos.ICustomer[] {
var _customers: Dtos.ICustomer[];
this._httpService.get('http://localhost/myTestApi/api/customers/')
.success(function (data) {
_customers = data as Dtos.ICustomer[];
}).error(function (error) {
console.log(error);
});
return _customers;
}
Chức năng này cuối cùng được khách hàng nhưng rõ ràng nó sẽ trở lại _customers trước HTTPService thực sự nhận được dữ liệu.
Tại thời điểm này tôi nghĩ rằng tôi có thể sử dụng Typscript async/await và đây là khi tôi kết thúc trong một mớ hỗn độn.
Tôi muốn viết chức năng của tôi như thế này:
public async GetCustomers(): Dtos.ICustomer[] {
var _customers: Dtos.ICustomer[];
await this._httpService.get('http://localhost/myTestApi/api/customers/')
.success(function (data) {
_customers = data as Dtos.ICustomer[];
}).error(function (error) {
console.log(error);
});
return _customers;
}
tôi ngay lập tức nhận được lỗi này: Lỗi Loại TS1055 'Dtos.ICustomer []' không phải là một loại async hàm trả về giá trị.
Tôi thấy điều này Async/Await , simple example (typescript)
tuy nhiên nó sử dụng một đối tượng Promise: return mới Promise
Nếu tôi cố gắng viết lại phương pháp chữ ký GetCustomers của tôi như sau:
public async GetCustomers(): Promise<Dtos.ICustomer[]> {}
tôi nhận được và không bị lỗi :
Không thể tìm thấy tên 'Hứa hẹn'
Tôi có cần phải nhập một cái gì đó để có được một Promise?
Bản sao có thể có của [Không đồng bộ/Await, ví dụ đơn giản (loại bản ghi)] (http://stackoverflow.com/questions/32401741/async-await-simple-example-typescript) –
Có tôi đã thấy điều đó nhưng trên lời hứa của tôi không tồn tại? Typecript dường như không biết gì về Promise. nếu tôi thay đổi chữ ký phương thức của mình thành công khai GetCustomers(): Promise {...} Tôi gặp lỗi "Không thể tìm thấy tên 'Lời hứa') –
John
Điều này chắc chắn sẽ làm cho câu hỏi của bạn khác từ một trong những liên kết, xin vui lòng chỉnh sửa nó để bao gồm các thông tin này –