Как дождаться результата Promise в НЕ асинхронной функции

Есть функция, обычная (её невозможно превратить в async, т.к. используется в CRM Creatio)

makeDetailFilter: function() {
   var ESQs = ...;
   var resultCollection = [];
   // Здесь не относящийся к задаче код
   var detailIDs = getDetailIdByESQ(ESQs);
   if (detailIDs && detailIDs.length) {
       // Делаем что-то
       resultCollection = detailIDs; 
   } else {
      resultCollection = ['x', 'y', 'z'];
   }
   return resultCollection;
}

async getDetailIdByESQ(esq) {
   var result = await new Promise(pr => {
      esq.getEntityCollection(function(result) {
         resolve(result);
      }, this);
   });

   return result;
}

esq.getEntityCollection(function(result) - также библиотечная и при том асинхронная.

Проблема в том, что в if (detailIDs && detailIDs.length) { передается незавершенный промис.

Вопрос - можно ли как-то дождаться его завершения? И как можно решить подобную проблему?


Ответы (1 шт):

Автор решения: Danil Apsadikov

Вы хотите сделать, чтобы синхронная функция ждала асинхронную функцию, если коротко, то это не получиться, если более подробно, то на англоязычном stackoverflow есть подробный ответ https://stackoverflow.com/a/47227878/11695435

→ Ссылка