我正试图在手机上获得自由空间并将其传递给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
显然这不是我应该怎么做的。谁比我聪明?
答案 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',
[]);
});
}