【问题标题】:Promise not resolving using async and await承诺不使用 async 和 await 解决
【发布时间】:2019-03-22 02:40:10
【问题描述】:

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

请理解我是新人,所以请随意提出您想要的建议。

这个想法是模拟与 DB 的连接或来自 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()。只是要清楚=)

【问题讨论】:

    标签: javascript promise es6-promise


    【解决方案1】:

    async function 返回一个承诺

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

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

    【讨论】:

    • 或者我们可以returnUsernameViaUserid(1).then(res => console.log(res))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 2016-02-02
    • 2021-11-27
    • 2016-05-20
    相关资源
    最近更新 更多