2016-03-31 12 views
1

2.0.0-beta.12 yapısında göründüğü gibi, dart'ların http sınıflarında oluşturulmasından yana, darttan angular2.http dosyasını kaldırdılar.Bir http isteğinden dart içinde angular2 ile bir söz verilsin mi?

Ancak, aşağıdaki gibi bir şey yapardınız, ancak istek özelliği, mülkünü ayarlayana kadar boştur. söz çözülürse ve görünümü güncellenir kadar

class Component { 
    var property; 

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

Ne gerçekten istediğiniz özellik için bir söz yer tutucudur. Peki bunu dart ile açısal2'de nasıl yapıyorsun?

Yoksa bunu yapmak için farklı bir dart/angular2 deyim var mı?

cevap

0

HttpRequest.getString(...) bir Future (JS/TS topraklarda Promise) aksi takdirde sonucu .then(...) çağırmak mümkün olmaz döndürür.

Sen

class Component { 
    var property; 

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

Hayır'ı kullanabilirsiniz ya - Bir yapıcı içinde async/await kullanamazsınız.

Alternatifler, nesne oluşturma işleminden sonra statik yöntemlerdir veya fazladan çağrılardır. Kurucuda kapsamlı çalışmalar yapmak zaten kötü bir uygulama.

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; 
} 

ve ekstra çağrı

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

    var property; 
} 

ile

Component.createNewInstance().then((c) => print(c.property)); 

gibi kullanabilir ve

var c = new Component() 
c.getData().then((_) => print(c.property)); 
gibi kullanırız
İlgili konular