2016-03-31 2 views
1

Кажется, в версии 2.0.0-beta.12 они удалили angular2.http из дротика в пользу использования дротика, встроенного в классы http.Получите обещание с угловым2 в дротике от http-запроса?

Однако, если вы должны были сделать что-то вроде следующего, тогда свойство равно null, пока запрос не установит свойство.

class Component { 
    var property; 

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

Что мы действительно хотим, является владельцем места обещания собственности до тех пор, пока обещание не будет разрешено, и представление обновлено. Итак, как вы делаете это в angular2 с дротиками?

Или есть другой способ стрельбы/угловой2 идиоматический способ сделать это?

ответ

0

HttpRequest.getString(...) возвращает Future (Promise в земле JS/TS) в противном случае вы не смогли бы назвать .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)); 

 Смежные вопросы

  • Нет связанных вопросов^_^