Асинхронные функции в javascript не будут работать - PullRequest
1 голос
/ 24 апреля 2020

У меня есть пример кода, но я не могу понять, почему консоль регистрирует вещи не по порядку.

    async function myAsyncFunction() {
        setTimeout(() => { console.log("1st"); return "something"; }, 500);
    }
    
    async function mainline() {
        let promise = new Promise((resolve, reject) => {
            setTimeout(() => { console.log("0th"); resolve(); }, 500);
        });
        promise.then(async () => {
            return await myAsyncFunction();
        })
        .then((string) => {
            console.log(string);
            console.log("2nd");
        });
    }

    mainline();

Журналы консоли:

> 0th
> undefined
> 2nd
> 1st

Так что, очевидно, моя главная линия не ждет разрешения асинхронной функции c. Что я сделал не так?

1 Ответ

2 голосов
/ 24 апреля 2020

Ваша функция myAsyncFunction ничего не возвращает. Вы должны обернуть это в обещание.

function myAsyncFunction() {
return new Promise( (res, rej) => 
    setTimeout(() => { console.log("1st"); res("something"); }, 500) );
}

function myAsyncFunction() {
return new Promise((resolve, reject) => {
    setTimeout(() => { console.log("1st"); resolve("something"); }, 500);
});
}

async function mainline() {
    let promise = new Promise((resolve, reject) => {
        setTimeout(() => { console.log("0th"); resolve(); }, 500);
    });
    promise.then(async () => {
        return await myAsyncFunction();
    })
    .then((string) => {
        console.log(string);
        console.log("2nd");
    });
}

mainline();
...