我试图从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变量为空。
我不太熟悉JavaScript/JQuery中的承诺框架,但我的印象是事件只应在完成前面的方法时触发。
有没有人有任何指示我如何在尝试POST之前正确等待登录完成?