我一周前使用nativescript创建了一个小应用程序。 我在列表视图中列出了一系列项目,当点击某个项目时,我正在向远程服务器请求获取详细信息。我的目的是获取响应并将其在上下文中发送到另一个页面。 这是我的尝试
单击项目时会触发此功能
import { HotelDetailViewModel } from "../../shared/view-models/hotel-detail-view-model";
import navigationModule = require("../../shared/navigation");
export function selectHotel( args ) {
let id = args.view.HotelId;
var hotel = new HotelDetailViewModel();
var rooms = hotel.getRooms( id );
console.log(rooms);
navigationModule.goToHotelDetail( rooms );
}
当我打印房间时,我什么都没得到
import config = require("../config");
import requestor = require("../request");
export class HotelDetailViewModel {
getRooms(id: number) {
var url = config.apiUrl + "hotels/" + id;
var rooms = [];
requestor.get(url).then((response) => {
response.hotel.room_types.forEach(room => {
console.log(room.name);
rooms.push({
name: room.name,
price: room.price,
id: room.id
});
});
});
return rooms;
}
}
此文件正确打印响应但是,当我在上面的代码段中调用getRooms时,我什么都没得到。有什么想法吗?
我可以弄清楚如何使它发挥作用
如果有更好的方法来实现我想要做的事情,请告诉我如何做。
提前致谢
答案 0 :(得分:0)
这是因为你{jinoms()仍在执行http请求而console.log
变量未被推送任何项目时rooms
。让getRooms()返回一个这样的承诺:
export class HotelDetailViewModel {
getRooms(id: number) {
return new Promise<any>((resolve, reject) => {
var url = config.apiUrl + "hotels/" + id;
var rooms = [];
requestor.get(url).then((response) => {
response.hotel.room_types.forEach(room => {
console.log(room.name);
rooms.push({
name: room.name,
price: room.price,
id: room.id
});
});
});
resolve();
}
}
}
然后在控制器中,你可以
var hotel = new HotelDetailViewModel();
var rooms;
hotel.getRooms(id).then((result) => {
console.log(r);
rooms = result;
});