Обещание не решить с помощью асинхронного и ждать - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь узнать об Promises и Async / Await.

Пожалуйста, поймите, что я новичок, поэтому не стесняйтесь вносить столько предложений, сколько хотите.

Идея состоит в том, чтобы смоделировать соединение с БД или ответ от конечной точки API с помощью retrieveUserFromFB (), которая будет возвращать обещание.

Затем, returnUsernameViaUserid (), которая является асинхронной, вызовет retrieveUserFromFB () и разрешит обещание. Или я так думаю.

async function returnUsernameViaUserid(userId) {
  const result = await retrieveUserFromFB();
  return result;
}


function retrieveUserFromFB() {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      resolve({user: 'thisistheusername'});
    }, 1000)
  });
}

console.log(returnUsernameViaUserid(1));

Но вывод всегда Promise {} Я буду признателен за любую помощь. UserId - это просто красочная деталь, не функциональная, и я не передаю ее в retrieveUserFromFB (). Просто чтобы быть ясно =)

1 Ответ

7 голосов
/ 21 марта 2019

async function возвращает обещание

Ваша проблема в том, что в настоящее время вы пытаетесь записать результат асинхронной функции, которая всегда равна Promise, чтобы исправить это, поместите ваш console.log в async function.

Другим решением будет использование .then на retrieveUserFromFB, чтобы вообще избежать async function, если вы того пожелаете.

async function returnUsernameViaUserid(userId) {
  const result = await retrieveUserFromFB();
  console.log(result);
}


function retrieveUserFromFB() {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      resolve({user: 'thisistheusername'});
    }, 1000)
  });
}

returnUsernameViaUserid(1)
...