Причина, по которой sampleFunc()
возвращает undefined
, заключается в том, что она фактически ничего не возвращает.Вы возвращаете значение внутри then
части асинхронного func2()
.Поскольку вы сами не возвращаете func2
, sampleFunc
не имеет возвращаемого значения.
Правильная реализация будет такой:
function sampleFunc(){
// func2 is an async function
return func2().then(results) => {
// below console stmt is able to print results
console.log(results)
return results
})
}
// func2 and thus sampleFunc are async. So the return value will be a promise and not the actual return value
sampleFunc().then(function(result) { console.log(result); })
Обещания могут быть действительно запутанными, когда вы используете их в первый развремя.Вы можете прочитать больше об обещаниях здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises
Редактировать: Приведенный выше пример будет работать, если func2()
имеет правильную реализацию Promise и вызывает его функцию разрешения.