2017-11-02 28 views
0

私は電話で空きスペースを得てIonicに渡そうとしています。コルドバは仕事をしていますが、Observableに変換するのに問題があります。ここに私が作成したサービスがあります。Cordova exec call to 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が取得されます。しかし、私は呼び出しの中でそれを得ることができます。観測が返されていない、私が代わりにundefinedを得る:

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

結果は次のとおりです。

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

どうやらこれは私がそれを行うことになっていない方法です。誰よりも私より賢い?

答えて

1

使用している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', 
     []); 
    }); 
} 
+0

Yay!ありがとう。あなたはもっと知っている。 –

関連する問題