Cordova执行官致电Observable

时间:2017-11-02 18:27:15

标签: angular cordova rxjs observable ionic3

我正试图在手机上获得自由空间并将其传递给Ionic。 Cordova完成了这项工作,但我无法将其转换为Observable。这是我创建的服务。

import {Injectable} from '@angular/core';
import {Observable} from 'rxjs/Rx';

@Injectable()
export class PhoneService {

    getFreeSpace() {
        return Observable.from(
            window['cordova'].exec(
                result => { return result},
                error => { return error},
                'File',
                'getFreeDiskSpace',
                [])
        )
    }

}

当我调用它时,cordova.exec正常运行并检索result。但是我只能在通话中得到它。不会返回Observable,我会改为undefined

this.getFreeSpace = this.phoneService.getFreeSpace()
                    .subscribe(result => { console.log(result) });

结果是:

Uncaught (in promise): TypeError: undefined is not observable

显然这不是我应该怎么做的。谁比我聪明?

1 个答案:

答案 0 :(得分:2)

您正在使用的cordova API似乎没有返回承诺,而是基于回调。您无法使用Observable.from()。您必须使用Observable.create

getFreeSpace() {
  return Observable.create(observer => {
    window['cordova'].exec(
      result => { observer.next(result); observer.complete(); },
      error => observer.error(result),
      'File',
      'getFreeDiskSpace',
      []);
  });
}