等待构造函数完成初始化

时间:2021-06-10 05:47:13

标签: angular typescript ionic4

我在下面的代码中将 api 服务调用到我的应用程序中。 问题是当我调用 apiPost() 函数时,this.apiToken 值为空。 这是因为当我调用 apiPost() 时,构造函数尚未初始化且 apiToken 值尚未分配。

this.storageService.get(constant.storage_key.api_token).then((data) => {
      this.apiToken = data;
     //Is it possible to return Observable inside here?
});

如何等到获取到apiToken后再调用this.httpAng.post()

export class MyApiService {

  apiToken = "";

  constructor(
    private httpAng: HttpClient,
    private storageService: StorageService,
  ) {
    this.storageService.get(constant.storage_key.api_token).then((data) => {
      this.apiToken = data;
    });
  }

 
  apiPost(aUrl, aParams): Observable<any> {
    let httpOptions: any = {
      headers: new HttpHeaders({
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + this.apiToken,
      }),
    }

    return new Observable((observer) => {
      // Post
      this.httpAng.post(aUrl, aParams, httpOptions).subscribe(
        async (data) => {
          switch (data['status']) {
            case 0:
              observer.next(data);
              break;
            default:
              this.alert.alertMessage(
                data['message']
                , () => {
                  observer.error(data)
                }
              )
              observer.error(data);
          }
        },
        async (error) => {
          console.log(error)
          observer.error(error);
        }
      );
    });
  }
}

1 个答案:

答案 0 :(得分:0)

Angular observable return undefined results

根据上述帖子更改了我的代码并使用了 btn1.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { JFileChooser filechooser = new JFileChooser(); filechooser.setDialogTitle("Select text file"); filechooser.showOpenDialog(null); File openfile = filechooser.getSelectedFile(); FileInputStream fis = null; try { fis = new FileInputStream (openfile); } catch (FileNotFoundException d) { // TODO Auto-generated catch block d.printStackTrace(); } BufferedReader br = new BufferedReader (new InputStreamReader (fis)); String line = null; try { line = br.readLine(); while (line != null) { String[] text = line.split(";"); textbox.append(text); line = br.readLine(); } } catch (IOException f) { // TODO Auto-generated catch block f.printStackTrace(); } try { br.close(); //closes the file } catch (IOException g) { // TODO Auto-generated catch block g.printStackTrace(); } } from 中的 rxjs