0

Есть функция, обычная (её невозможно превратить в 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 Answers1

1

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