Как сделать асинхронное синхронным?

Привет, помогите найти правильное решение.
Нужно, чтобы MainFoo дождалась возврата значения от AsyncFoo.
Функцию MainFoo нельзя изменять и нельзя изменять сигнатуру AsyncFoo.
AsyncFoo внтури можно менять как угодно.
Можно использовать промисы, но не Async.js

function MainFoo () {
    var myVar = AsyncFoo() // должен получить 100
}

function AsyncFoo() {
    var result
    setTimeout(function(){
        result = 100    
    }, 5000)
    return result
}
  • Вопрос задан
  • 419 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
function MainFoo () {
    var myVar;
    AsyncFoo().then(function(result) {
        myVar = result;
    });
}

function AsyncFoo() {
    return new Promise(function(resolve, reject) {
        setTimeout(function(){
            resolve(100);    
        }, 5000)
    });
}


Еще есть вариант с babel и async/await
async function MainFoo () {
    var myVar = await AsyncFoo();
}

function AsyncFoo() {
    return new Promise(function(resolve, reject) {
        setTimeout(function(){
            resolve(100);    
        }, 5000)
    });
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы