Вызов метода из promise
Пытаюсь построить нужную мне цепочку вызовов
IsInNameGroup(){
return new Promise(function(resolve, reject) {
var currentUserId = Xrm.Utility.getGlobalContext().userSettings.userId;
var fetch = `my fetch`;
fetchXML = "?fetchXml=" + encodeURIComponent(fetch);
Xrm.WebApi.retrieveMultipleRecords("role", fetchXML).then(
function success(result) {
var res = false;
if(result.entities.length === 1){
res = true;
}
resolve(res);
},
function (error) {
console.log(error.message);
}
);
});
},
OnClick: function(primaryControl){
let p = new Promise(function(resolve,reject){
let result = this.IsInNameGroup();
result.then(res =>{
debugger;
resolve(res);
});
});
p.then(res => {alert(res);});
alert("халлоу");
},
В конечном итоге, должно получится так, что метод OnClick сперва выводит результат работы метода IsInNameGroup (true/false), и только после этого алерт alert("халлоу");
На данный момент мой код сперва выводит "халлоу", и потом выкидывает в консоль "TypeError: this.IsInNameGroup is not a function". В целом да, IsInNameGroup действительно не функция, а метод. Но как исправить код и получить нужный мне порядок выполнения? OnClick делать async нельзя, т.к. это handler (просто напросто не работает будучи async).
Ответы (1 шт):
Автор решения: Александр Рогонов
→ Ссылка
Не стал тянуть весь ваш код. Но в целом должно быть понятно.
const fetchPromise = () => new Promise((resolve) => {
setTimeout(() => {
resolve(true);
}, 1000);
});
const onClick = async () => {
const fetchResult = await fetchPromise();
console.log(fetchResult);
console.log('Хеллоу');
};
document.getElementById('button').addEventListener("click", onClick);
<button id="button">Супер кнопка</button>