2017-11-28 15 views
1

オンラインExchangeからすべての予定をいくつかのユーザー用にフェッチしたい。Typescript EWS Loop複数のユーザーカレンダー

1人のユーザーでは問題ありません。

これについては、TypeScriptとEWS APIをts ews apiから使用しました。

ここでは、単一ユーザーソリューションを複数のユーザーに適用しようとしました。

このユーザーは配列に格納されます。だから私は配列の上にループし、各ユーザは交換を呼び出してアポイントメントを得る。

ただし、コンソールには1つのログしか表示されません。しかし、this.exchangeUsersには4つのオブジェクトが含まれているため、4つの原因があります。

私はループが解決する約束を待っているわけではないことを知っているので、すべての約束がアレイの最後のユーザーの参照を得ているかもしれませんが、コンソールログに4つのエントリがあるべきではないでしょうか?

答えて

0

数日後に研究とテストをして、解決策を見つけました。

他の人が同じような問題を抱えている場合に備えて、私はこれを共有したいと思います。

コードは次のように自分で編集しました:

for (let iUser = 0; iUser < this.exchangeUsers.length; iUser++) { 
    let calView = new CalendarView(new DateTime(view.start), new DateTime(view.end));// Create Calender View Exchange Web Service 
    calView.PropertySet = new PropertySet(AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.End, AppointmentSchema.IsAllDayEvent); 

    let calfolder = new FolderId(WellKnownFolderName.Calendar, new Mailbox(this.exchangeUsers[iUser].mail)); 

    await this.exch.FindAppointments(calfolder, calView).then(
     (liAppointments) => { 
     console.log(liAppointments); 

     } 
    ).catch(
     (err) => { 
     console.log(err); 
     }); 

説明:

私は、API Exchangeがsquenceに1で1コールしなければなりませんでした。 私はパラレルコールでこの作業を行うことはできませんでした。

コールを縮退させるには、1つのコールが完了するのを待たなければなりません。

この場合、キーワードが使用されます()。これにより、約束が解決されるまで実行が一時停止されます。

ユーザは、で待機します。。関数が非同期であることをTypescriptに伝えるには、関数宣言の前にキーワードasyncを追加する必要があります。

あなたはこのhere

についての詳細を読むことができます。さらに私は、forループの正常でこれを使用する必要がありました。各ループ自体は関数を作成しますが、これにasync/awaitキーワードを追加しても、それを処理することはできません。

私はこの回答でsomoneの時間を節約できると思います。

誰かがこれを行うより洗練された方法を知っている場合は、私たちとあなたの知識を共有する自由落ちた。

関連する問題