2017-07-25 12 views
1

AngularJSアプリケーションをAngular 4に変換してSharePointからデータを取得しています。これはJSOMを使用しており、executeQueryAsync()メソッドを使用しています。AngularJSの約束をJSOMのAngularXに変換する

サーバーからexecuteQueryAsync()を使用してデータを取得し、それを私のサービス内の監視可能オブジェクトに格納したいとします。古いバージョン(私のものではない)から変換しなければならないコードは以下の通りです。今私はそれを私のサービスに変換するときに構文に苦しんでいます。私は角4

にこれを変換する方法を絶対予定はありません

getAllStatusReps($scope) { 
 
    const deferred = $q.defer(); 
 

 
    const ctx = SP.ClientContext.get_current(); 
 
    const web = ctx.get_web(); 
 

 
    const statusList = web.get_lists().getByTitle(this.statusListName); 
 
    const twitterList = web.get_lists().getByTitle(this.twitterListName); 
 

 
    const statReps = statusList.getItems(this.getQueryForAllStatusReps()); 
 
    const twitReps = twitterList.getItems(this.getQueryForAllStatusReps()); 
 
    const queryText = ` 
 
     <View> 
 
     <RowLimit>1</RowLimit> 
 
     <ViewFields>{0}</ViewFields> 
 
     <Query> 
 
      <Where><IsNotNull><FieldRef Name=\'EPMStatusDate\' /></IsNotNull></Where> 
 
      <OrderBy><FieldRef Name=\'ID\' Ascending= \'False\' /></OrderBy> 
 
     </Query> 
 
     </View>`; 
 

 
    const statCamlQuery = new SP.CamlQuery(); 
 
    statCamlQuery.set_viewXml(String.format(queryText, this.getViewFields(true, false))); 
 
    const lastStatRep = statusList.getItems(statCamlQuery); 
 

 
    const twitCamlQuery = new SP.CamlQuery(); 
 
    twitCamlQuery.set_viewXml(String.format(queryText, this.getViewFields(false, false))); 
 
    const lastTwitRep = twitterList.getItems(twitCamlQuery); 
 

 
    ctx.load(statReps); 
 
    ctx.load(twitReps); 
 

 
    ctx.load(lastStatRep); 
 
    ctx.load(lastTwitRep); 
 

 
    ctx.executeQueryAsync(
 
     function() { 
 
     deferred.resolve({ 
 
      statReps: statReps, 
 
      twitReps: twitReps, 
 
      lastStatRep: lastStatRep, 
 
      lastTwitRep: lastTwitRep 
 
     }); 
 
     }, 
 
     function (sender, args) { 
 
     deferred.reject('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace()); 
 
     } 
 
    ); 
 

 
    return deferred.promise; 
 
    }

あなたが実行して観測に約束を変換することができ

答えて

0

const $thingWhichYouCanSubscribeTo = Observable.fromPromise(serviceOrThingThatReturnsPromise()) 

も下部にどこでこれを試みることができますあなたは約束を返す:

return Observable.fromPromise(deferred.promise); 

T

getAllStatusReps($scope).subscribe(()=>{...},()=>{...}) 

はまた、あなただけの観測を使用して、それを再書き込み可能性があり、新しい観測可能を返すサービスを作成します:鶏、あなたは何ができる