2017-11-28 3 views
1

여러 사용자를 위해 온라인 Exchange에서 모든 약속을 가져 오려고합니다.Typescript EWS 루프 다중 사용자 달력

단일 사용자의 경우 이는 별 문제가되지 않습니다.

이 경우 TypeScript와 EWS API를 ts ews api에서 사용했습니다.

이제 단일 사용자 솔루션을 여러 사용자에게 적용하려고했습니다.

이 사용자는 배열에 저장됩니다. 그래서 배열을 반복하고 각 사용자가 교환을 호출하여 약속을 잡습니다.

this.exchangeUsers.forEach((userObj) => { 
    const resultObservables = [];//Collect Observable Results in an Array 

    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); 

    calfolder = new FolderId(WellKnownFolderName.Calendar, new Mailbox(userObj.mail)); 

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

    }); 

하지만 콘솔에 하나의 로그 만 표시됩니다. 하지만 this.exchangeUsers에는 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을 호출했습니다. 병렬 호출로이 작업을 수행 할 수 없었습니다.

전화를 스 퀴 넘게 만들려면 하나의 통화가 완료 될 때까지 기다려야합니다.

이 경우 키워드 을 사용합니다 (). 그러면 약속이 해결 될 때까지 실행이 일시 중단됩니다.

사용자가 인 경우비동기 기능입니다. 함수가 비동기 적이라는 Typescript에게 알려면 비동기을 함수 선언 앞에 추가해야합니다.

당신이 here

에 대한 자세한 내용을보실 수 있습니다 게다가 난 루프에 대한 정상이를 사용했다. 각 루프 자체에 대해 함수를 만들지 만, 비동기/대기 키워드를 추가하더라도이 키워드를 관리 할 수는 없습니다.

나는이 답변으로 somone을위한 약간의 시간을 절약 할 수 있기를 바랍니다.

누군가가이를 더 세련된 방법으로 알고 있다면, 우리와 함께 지식을 나누어주십시오.