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 devに関するこの

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

おかげのようになりますです、あなたは私が策定していないという点で正しかったですその後、正しく処理してください。注意すべき主なものは、非同期AuthenticationContextを作成している

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

:予想通りsaveToSharepoint方法はとてもように見えるので、これについてのSharePointを参照してください他のもののために

は、私は実際に、それが動作するためのコードを再フォーマットこれにより、ログイン処理全体が完了した後にFormatAndUploadが呼び出されます。ちょうど私がSharepointに関してこれを見ている他の人々のためにこれを掲示すると思った。

関連する問題