Внешняя функция должна быть либо промисом либо иметь коллбек, куда выпередаете resolve
update:
Как бы сделал я, если бы нужно было в промисе ждать асинхронную функцию
function findMaxSavedID(cb, cbErr){
InfoObject.findOne().sort('-postID').exec(function(err, item){
if(err) cbErr(err);
else cb(item);
});
}
function openPage(){
return new Promise( function(resolve, reject) {
// добавляем таймаут, вдруг ваша функция навсегда уйдет в работу.
setTimeout(reject, 1000*60*3, 'timeout');
DBHandler.findMaxExistID(resolve, reject);
}
}
Вызов через
openPage()
.then(response=>{ */.... /*})
.catch(error=>{ */.... /*});
update2:
Я не рекомендую делать функцию, в которой будет создан промис и выполнен, так как эта функция будет выполняться асинхронно и в случае необходимости продолжаать код, вы не сможете отловить ее результат, он выполнится неизвестно когда, параллельно с продолжающимся кодом.
Всегда возвращайте промис и там где нужно вызывайте его, далее можно работать через цепочку then либо использовать async await или vo(generator) через ожидание асинхронного ответа в yield.