2016-03-31 7 views
1

2.0.0-beta.12のビルドでは、ダーツのhttpクラスに組み込まれているので、ダーツからangular2.httpを削除したようです。httpリクエストからダーツのangle2で約束しますか?

ただし、次のようなことをした場合、リクエストはプロパティを設定するまでnullです。

class Component { 
    var property; 

    Component() { 
    HttpRequest.getString("/path/to/something") 
     .then((resp) { 
     property = JSON.decode(resp); 
     }); 
    } 
} 

私たちが本当に望むのは、約束が解決され、ビューが更新されるまで、プロパティの約束をする場所です。だから、あなたはどのようにダーツでangular2でそれをしますか?

または、それを行うには別のダーツ/角度2の慣用方法がありますか?

答えて

0

HttpRequest.getString(...)は、そうでなければ、結果に.then(...)を呼び出すことができないだろうFuture(JS/TSの土地でPromise)を返します。

あなたは

class Component { 
    var property; 

    Component() async { 
    await HttpRequest.getString("/path/to/something") 
     .then((resp) { 
     property = JSON.decode(resp); 
     }); 
    doSomethingAfterRequestReturned(); 
    } 
} 
async/ await

ハズレを使用するか - あなたは、コンストラクタで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)); 
のようにそれを使用するようにそれを使用します
関連する問題