Как дождаться результата 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