0

Apache Cordova 응용 프로그램의 공유 목록에 항목을 추가하려고합니다. 먼저 사용자에게 로그인하라는 메시지를 표시 한 다음 데이터 입력에 HTTP Post를 작성합니다.Promise가 완료되기 전에 메서드가 호출됩니다.

나는 다음과 같은 코드가 있습니다 :

function saveToSharepoint(data) { 
    var authority = "https://login.microsoftonline.com/common/"; 
    var authContext = new Microsoft.ADAL.AuthenticationContext(authority); 
    var authResult = authContext.acquireTokenAsync("https://my.sharepoint.com", "4be098f8-2184-4831-9ef7-3d17dbbef6a0", "http://localhost:4400/services/office365/redirectTarget.html") 
    .then(FormatAndUpload(authResult, data), errorCallback); 

} 

function FormatAndUpload(authResponse, data) { 
    var token = authResponse.accessToken; 
    var expiry = authResponse.expiresOn; 
    console.log("Token acquired: " + authResponse.accessToken); 
    console.log("Token will expire on: " + authResponse.expiresOn); 
    $.ajax({ 
     url: "https://my.sharepoint.com/_api/web/lists/getbytitle('" + Test + "')/items", 
     type: "POST", 
     contentType: "application/json;odata=verbose", 
     data: JSON.stringify(data), 
     headers: { 
      "Accept": "application/json;odata=verbose", 
      "Authoriztion":"Bearer " + token 
     }, 
     success: function (data) { 
      success(data); 
     }, 
     error: function (data) { 
      failure(data); 
     } 
    }); 
} 

오전 데 문제가 acquireTokenAsync가 완료되기 전에 FormatAndUpload 메서드가 호출되고 있음을, 그래서 FormatAndUpload 방법에 전달 된 authResponse 변수가 null입니다.

Javascript/JQuery의 약속 프레임 워크에 익숙하지 않지만 이벤트가 이전 메서드 완료시에만 발생해야한다는 인상하에있었습니다.

POST를 시도하기 전에 로그인이 완료 될 때까지 기다릴 수있는 방법에 대한 지침이있는 사람이 있습니까?

답변

1

FormatAndUpload (authResult, data); 잘못된
하는 콜백을 전달하는 올바른 방법이

.then(function(authResult){ 
    FormatAndUpload(authResult, data); 
}, errorCallback); 

그래서 당신의 saveToSharepoint 대답 Newbee 데브이

function saveToSharepoint(data) { 
    var authority = "https://login.microsoftonline.com/common/"; 
    var authContext = new Microsoft.ADAL.AuthenticationContext(authority); 
    var authResult = authContext.acquireTokenAsync("https://my.sharepoint.com", "4be098f8-2184-4831-9ef7-3d17dbbef6a0", "http://localhost:4400/services/office365/redirectTarget.html") 
    .then(function(authResult){ 
     FormatAndUpload(authResult, data); 
    }, errorCallback); 

} 
0

감사처럼 될 것입니다, 당신은 내가이를 공식화하지 않은 점에서 정확했다 다음 방법을 올바르게. 이에 대해 셰어를 볼 수있는 다른 사람을 위해

, 나는 실제로 예상대로 작동하려면 코드를 포맷, 그래서 saveToSharepoint 방법은 같은 같습니다

function saveToSharepoint(data) { 
var AuthenticationContext = Microsoft.ADAL.AuthenticationContext; 
AuthenticationContext.createAsync("https://login.microsoftonline.com/common/") 
    .then(function (authContext) { 
     authContext.acquireTokenAsync(
      "https://my.sharepoint.com",  // Resource URI 
      "4be098f8-2184-4831-9ef7-3d17dbbef6a0",  // Client ID 
      "http://localhost:4400/services/office365/redirectTarget.html" // Redirect URI 
     ).then(function (authResult) { 
      FormatAndUpload(authResult, data); 
     }, function (err) { 
      console.log(err); 
     }); 
    }, function (err) { 
     console.log(err); 
    }); 
} 

비동기 AuthenticationContext을 만드는주의 할 점 이렇게하면 전체 로그인 프로세스가 완료된 후 FormatAndUpload가 호출됩니다. 그냥 내가 셰어 포인트에 대해 이것을보고 붙어있는 다른 사람들을 위해 이것을 게시 할 것이라고 생각했습니다.

관련 문제