0

Пытаюсь построить нужную мне цепочку вызовов

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).

Arcadiy
  • 841
EaredGen
  • 1
  • 2
  • Выложите пример, который можно запустить. И посмотрите в сторону https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Promise/all – nazarpunk Jul 23 '21 at 19:17

1 Answers1

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>