从http请求获取带有angular2的dart承诺?

时间:2016-03-31 00:05:48

标签: dart angular dart-async

似乎在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惯用方法吗?

1 个答案:

答案 0 :(得分:0)

HttpRequest.getString(...)会在JS / TS土地上返回FuturePromise),否则您将无法在结果上调用.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));