承诺不使用异步解决并等待

时间:2019-03-21 18:35:20

标签: javascript promise es6-promise

我正在尝试了解Promises和Async / Await。

请理解我是新手,请随时为您提供尽可能多的建议。

这个想法是使用retrieveUserFromFB()模拟到数据库的连接或API端点的响应,这将返回一个承诺。

然后,异步的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 个答案:

答案 0 :(得分:7)

一个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)