私のangularJS 4アプリでは、何かのためにデバイスモーションと呼ばれるコードホイール加速度計プラグインを使用しています。 APIには関数呼び出しgetAcceleration(successCallback、errorCallback)があります。だから私は私のコンポーネントでこのこの約束のコールバックから値を返すにはどうすればよいですか?
@Injectable()
export class AccelerometerService {
private acc : any;
constructor(private winRef:WindowRef) {
this.acc = this.winRef.nativeWindow.plugins.navigator.accelerometer;
this.onSuccess = this.onSuccess.bind(this);
this.onError = this.onError.bind(this);
}
getAcceleration(){
return new Promise ((resolve, reject) =>{
resolve(this.acc.getCurrentAcceleration(this.onSuccess,this.onError));
});
}
onSuccess(acceleration){
return acceleration; // value that I want returned to my component
}
onError(){
return 'error';
}
}
のように見えるサービスを作成し、私がするonSuccessコールバック関数からの戻り値を取得しようとするこれを行う、しかし応答は未定義
this.accelerationService.getAcceleration().then((res) =>{
console.log(res); // res is undefined
})
どのようにすることができていますこの問題を解決しますか?
getAcceleration(): Promise<any> {
return new Promise<any>((resolve, reject) => {
this.acc.getCurrentAcceleration()
.success(data => {
resolve(<any>data);
})
.error(() => {
reject('Failed to load profile');
});
})
}
getCurrentAccelerationの戻り値ではなく、結果を使用して約束を解決する必要があります。 –
これはobservalbesを使用して解決する必要があります – Nickolaus
@Nickolausありがとうございます。私はobservablesをさらに見ていきます – joejoeso