首页 > 解决方案 > 承诺不使用 async 和 await 解决

问题描述

我正在尝试了解 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()。只是要清楚=)

标签: javascriptpromisees6-promise

解决方案


一个async function返回一个承诺

您的问题是,目前,您正在尝试记录始终为 a 的异步函数的结果Promise,要解决此问题,请将您console.logasync function.

如果您愿意,另一种解决方案是使用.thenonretrieveUserFromFB来完全避免这种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)


推荐阅读