2017-05-13 5 views
-1

私はVisual Studio CodeでTypeScript 2.3.2を使用しています。私はそれを使用してSharePointバックエンドのフロントエンドクライアントを作成しています。コールからJSONオブジェクトを取得できるようにするSPServices(http://sympmarc.github.io/SPServices/)というSharePoint jQueryプラグインがあり、このメソッドは$ .Deffered()オブジェクトを返します。 SPServicesロジックは、(resolveWithを呼び出し)、それのようになりますSharePointのクエリからの結果を渡します。ここではTypeScript jQueryはパラメータを解決しないことを約束します

var thisResult = { 
     changeToken: newChangeToken, 
     mapping: thisListJsonMapping, 
     data: jsonData, 
     deletedIds: deletedIds 
    }; 

result.resolveWith(thisResult); 

を解像度を処理するための私のコードです:

$.when(promise) 
    .then(res => { 
     let me = this; 
     debugger; 
    }); 

これは、数回繰り返した後でコードの試行。 「res」は決して割り当てられません。これはtypecriptのコンテキストがクラスです。これはChromeでブレークポイントに達したときに表示されます。コンソールで "this"をチェックすると、先にresolveWith()に渡されたオブジェクトが表示されます。

私が見たすべてのチュートリアルでは、 "thisResults"のJSONオブジェクトにresを割り当てる必要があると言われています。どんな考えが間違っていて、なぜこれが整列しないのでしょうか?

編集:私はフォールバック計画があったので、以下の回答で作業した後、いくつかの追加テストを行った。 SPServicesライブラリを編集しての代わりにresult.resolve(thisResult);に変更すると、オブジェクトは適切にラムダに返されます。

+0

'result'と' promise'はどこから来たのですか?彼らは同じではありませんか?私は '$ .when(result).then(reply => ...)'のようなものでなければならないと思います。 – Granga

答えて

4

これを呼び出しコンテキストにしたい場合は、矢印機能を使用しないでください。これはjquery、アンダースコアなどのライブラリで使用されるコールバックの場合です。太い矢印の代わりに関数を使用するほうがよいでしょう。

+0

私が見たtypescriptのドキュメントのドキュメントでは、解像度オブジェクトを受け取る太い矢印が表示されていますが、少なくとも関数に切り替えると、TSがまだコンパイルされるのに必要なコンテキストが「this」に与えられます。 – SenseiHitokiri

関連する問題