似乎在2.0.0-beta.12版本中,他们从dart中删除了angular2.http,转而使用dart内置的http类。
但是,如果您要执行以下操作,则在请求设置属性之前,属性为null。
class Component {
var property;
Component() {
HttpRequest.getString("/path/to/something")
.then((resp) {
property = JSON.decode(resp);
});
}
}
我们真正想要的是物业的承诺持有者,直到承诺得到解决并且视图得到更新。那你怎么用angular2做角落?
或者有不同的dart / angular2惯用方法吗?
答案 0 :(得分:0)
HttpRequest.getString(...)
会在JS / TS土地上返回Future
(Promise
),否则您将无法在结果上调用.then(...)
。
<击> 撞击>
<击>您可以使用async
/ await
class Component {
var property;
Component() async {
await HttpRequest.getString("/path/to/something")
.then((resp) {
property = JSON.decode(resp);
});
doSomethingAfterRequestReturned();
}
}
击> <击> 撞击>
nope - 您无法在构造函数中使用async
/ await
。
替代方法是静态方法或对象创建后的额外调用。无论如何,在构造函数中做大量工作都是不好的做法。
class Component {
Future<Component> createNewInstance() async {
var c = new Component();
await HttpRequest.getString("/path/to/something")
.then((resp) {
c.property = JSON.decode(resp);
});
return c;
}
var property;
}
并像
一样使用它Component.createNewInstance().then((c) => print(c.property));
额外通话
class Component {
getData() {
return HttpRequest.getString("/path/to/something")
.then((resp) {
property = JSON.decode(resp);
});
}
var property;
}
并像
一样使用它var c = new Component()
c.getData().then((_) => print(c.property));