我在 Dynamics 365 中调用函数 enableButton 来启用/禁用按钮。我必须向系统返回一个 Promise。如果我执行一个返回 Promise 的简单测试函数,这工作正常,但我需要获取一个令牌,然后对服务进行外部调用以设置 true/false,然后返回 Promise。当我这样做时,它不起作用。似乎 Dynamics 从未从函数中获得 Promise。
这是我的代码(我已经发布了一些细节)。我只在 Dynamics 中调用 enableButton()。
function enableButton() {
var params = getParams();
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://my.tokenendpoint.com");
xhr.onload = function () {
var token = JSON.parse(xhr.response).access_token;
getExternalData(token, ssn);
}
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(params);
}
function getExternalData(token) {
return new Promise(function (resolve, reject) {
var url = "http://example.com"
var query = JSON.stringify(
{
"queryparams": true
}
);
var xhr = new XMLHttpRequest();
xhr.open("POST", url);
xhr.onload = () => {
if (xhr.readyState === xhr.DONE) {
if (xhr.status === 200) {
var data = JSON.parse(xhr.responseText);
var hasExternalData = hasExtData(data[0]); //returns a boolean
resolve(hasExternalData);
}
else {
reject(xhr.statusText);
}
}
};
xhr.onerror = function (e) {
reject(xhr.statusText);
};
xhr.setRequestHeader("Authorization", "Bearer " + token);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(query);
});
}
我已经使用 fetch 重写了代码,但我没有收到返回给 Dynamics 的正确数据。
如果我在 Dynamics 中使用像这样的简单函数进行测试,它会起作用:
function enableButton() {
return new Promise(function (resolve, reject) {
var test = true;
resolve(test);
},
function (error) {
reject(error.message);
console.log(error.message);
}
);
}
BIG阳
慕的地10843
相关分类