async / await не вернув решенное обещание - PullRequest
0 голосов
/ 17 декабря 2018

Насколько я понимаю, async/await, await заставляет JavaScript приостанавливаться до тех пор, пока Promise не будет разрешен или отклонен, прежде чем он продолжит работу.Учитывая следующий код

function foo(uri) {

    … do a bunch of other stuff …

    const result = bar(uri);
    console.log('step 2 done');
    return {"uri": uri, "result": result};
}

function async bar(uri) {
    const response =  await fetch(uri);
    const result = await JSON.parse(response);
    console.log('step 1 done');
    return result;
}

const result = foo('my/server/resource');
console.log(result);

Я ожидаю

step 1 done
step 2 done
{"uri": 'my/server/resource', "result": { … bunch of data … }}

, но я получаю

step 2 done
{"uri": 'my/server/resource', "result": {}}
step 1 done

Что я делаю не так?

1 Ответ

0 голосов
/ 17 декабря 2018

Чтобы JavaScript знал , что bar() возвращает разрешение, а не объект Promise (возможно, будет использоваться позже), вам нужно сообщить ему об этом через awaitв вашем методе foo():

const result = await bar(uri);
console.log('step 2 done');
return {"uri": uri, "result": result};

Также обратите внимание, что, поскольку мы сейчас используем ключевое слово await, ваш метод foo() также должен иметь префикс async перед именем метода

async function foo(uri) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...