0
我想填充數組zvols
,其中包含zvols列表的路徑的名稱。問題是我得到一個空數組成功獲取電話後,使用.push方法後typescript數組爲空爲空
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import { Observable, Subject, Subscription } from 'rxjs/Rx';
import { EntityUtils } from '../pages/common/entity/utils'
import { RestService, WebSocketService } from '../services/';
@Injectable()
export class VmService {
protected volume_resource_name: string = 'storage/volume'
constructor(protected rest: RestService){
};
getStorageVolumes() {
let zvols: Array<any> = [];
this.rest.get(this.volume_resource_name , {}).subscribe((res) => {
let data = new EntityUtils().flattenData(res.data);
for (let zvol_obj of data){
if (zvol_obj.type === 'zvol') {
zvols.push(zvol_obj.path);
}
}
console.log("BEFORE:" + zvols);
});
console.log("AFTER:" + zvols);
return zvols;
}
}
我可以看到控制檯打印
AFTER:
main.bundle.js:744 Unknown message: Object {msg: "ready", subs: Array(1)}
vm.service.ts:26 BEFORE:tank-a/ds-a/zvol-a,tank-b/ds-b/zvol-b
我感到困惑的這種行爲。 :(
你在控制檯看到的是AFTER是pr在之前之前。這意味着您的'BEFORE''console.log()'實際上是在回調函數中的'return zvols'之後調用的。你不能像這樣返回異步操作的結果。 – artem
好的,請告訴我如何返回asnyc電話的結果? –
你不能。你必須在回調中使用它。如何 - 這取決於你想要用它做什麼。你可以從'getStorageVolumes()'返回'get()'的結果,然後調用它的代碼應該執行'subscribe()'並在它提供給'subscribe()'的回調中使用結果。 – artem