2017-05-31 41 views
0

我想從返回的異步調用填充項目。使用異步調用angular2分配變量

this._service.getAll() 
     .subscribe(
      data => { 
       this.items = data.map(function (item) { 
        return { a: item.a, b: item.b }; 
       }, error => console.error('error: ', error)) 
     }); 

console.log(items); 

作爲異步調用的分配不會立即發生,因此,我不會在代碼的下一行項目獲得的值,因爲這樣的console.log(項目)打印空。

如何確保項目不爲空。

+0

您的console.log在您的服務之前執行 –

+0

是的確實發生了。謝謝。如何在服務調用後執行console.log – Ningomba

回答

1

你不能。您必須使用回調中的項目。但是,您可以使用回調中外部範圍的變量,這就是爲什麼您可以將它們分配到this.items

我想提的是,當然items將永遠爲空,你可能有更多的運氣this.items(雖然不只是在訂閱後)。但是,就角度而言,將項目分配給屬性時,組件將使用更新的數據重新渲染。


有一些實驗性的技術,讓您以同步的方式,await編寫異步代碼,但它要求你寫的代碼略有不同(主要是標誌着您使用等待的異步功能)。

+0

是的,它在視圖中工作。但我想從api調用的構造函數中分配一個變量。這怎麼能實現? – Ningomba

+0

你能更詳細地告訴我如何使用回調來實現它嗎?我嘗試了多種方式,但它根本不起作用。我正在使用該變量來填充它作爲空值的控件。 – Ningomba