1

私はTypescriptでIonicを使用しています。私はfollowing apiにアクセスする必要があります。活字体でTypescript:コールバックでJavascript関数を呼び出す方法

load(key, successCallback/*(value)*/, failCallback) 

私は次のようにします。

cordova.plugins.icloudkv.load('key').then((data) => { 
    console.log(data); 
    alert('load key: ' + JSON.stringify(data)); 
     }); 
    } 
    }).catch((e) => { 
    console.error(JSON.stringify(e)); 
    this.doAlert('iCloud: ' + JSON.stringify(e)); 
    }); 

はしかし、alertは解雇されることはありません。

質問

誰かがtypescriptですを使用してJavaScript関数を呼び出すための最良の方法何を助言することができますしてください?

cordova.plugins.icloudkv.load('key', 
    (data)=>{ 
    console.log(data); 
    alert('load key: ' + JSON.stringify(data)); 
    }, (e)=>{ 
    console.error(JSON.stringify(e)); 
    this.doAlert('iCloud: ' + JSON.stringify(e)); 
}); 
+1

これは約束を返しますか?そうでない場合は、おそらく 'cordova.plugins.icloudkv.load( 'key'、()=> {}、()=> {})'のようなことをする必要があります。 – epascarello

+1

そうでなければ、それは約束のように扱うことはできません。それを約束(または観測可能 - https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/fromcallback.md)に変換するか、TSはJSを呼び出して、コールバック(矢印)関数を渡して前と同じように呼び出します。 – jonrsharpe

+0

クラスのメソッドを成功/エラーハンドラとして使用できます。 'cordova.plugins.icloudkv.load( 'key'、this.someClassMethod、this.someOtherClassMethod);' –

答えて

2

は、より多くのように見えるでしょうか?

コードでは、loadがPromiseを返すものとします。あなたはAPIが1を使用していないにもかかわらず、Promiseで作業する場合は

cordova.plugins.icloudkv.load('key', (data) => { 
     console.log(data); 
     alert('load key: ' + JSON.stringify(data)); 
    }, (e) => { 
     console.error(JSON.stringify(e)); 
     this.doAlert('iCloud: ' + JSON.stringify(e)); 
}); 
+0

ありがとう、私はちょうどそれをテストしており、それが動作する場合、これを答えとしてマークします – Richard

1

コンソールにエラーを得ている:あなたのコードを提供してきましたAPIによる

おかげ

+1

また、矢印関数 'this'は異なるスコープを持つことに留意してください。私の例では、これがあなたが望む範囲であると仮定しています。 –

+0

ありがとうございます。あなたは正しい答えを持っています。しかし、あなたの直前に投稿した人の答えと同じです。正しい答えとしてマークします。あなたは票をあげる – Richard

0

は、呼び出しの周りPromise構築:これが動作するかどうかの例では、明示的load方法に2つのコールバックを要求するので、参照してください:

new Promise((resolve, reject) => cordova.plugins.icloudkv.load('key', resolve, reject)) 
.then((data) => { 
    console.log(data); 
    alert('load key: ' + JSON.stringify(data)); 
     }); 
    } 
    }).catch((e) => { 
    console.error(JSON.stringify(e)); 
    this.doAlert('iCloud: ' + JSON.stringify(e)); 
    }); 
関連する問題