javascript 执行then()操作时未按预期返回值[重复]

8xiog9wr  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(114)

此问题已在此处有答案

How do I return the response from an asynchronous call?(42个回答)
How to get properties / values from snapshot.val() or snapshot.exportVal() in Firebase?(1个答案)
8小时前关闭
我有一个异步函数,它返回一个与用户配置文件相关的对象,每当调用它并执行.then时,我都会返回[Object object],而不是我想要的实际值。
下面是返回promise的函数:

export const getUserData = async (userId) => {
    try {
        const app = getFirebaseApp();
        const dbRef = ref(getDatabase(app));
        const userRef = child(dbRef, `users/${userId}`);

        const snapshot = await get(userRef);
        return snapshot.val();
    } catch (error) {
        console.log(error);
    }
}

然后我在我的代码库中调用这个函数,如下所示:

const userData =  getUserData(data.userId).then((data) => {
        console.log(data);
      })

然而,数据等于[Object, object],而不是我想要使用的实际值。为什么即使我执行.then()方法也没有提取值?谢谢.
编辑1:

const userDataFunction =  async (uid) => {
    let data  = await getUserData(uid)
    // THIS LOGS THE ACTUAL VALUE
    console.log(data);
    return data
  }

  const userData = userDataFunction(data.userId)
  // HOWEVER, THIS LOGS [OBJECT, object]. 
  console.log(userData);
13z8s7eq

13z8s7eq1#

代码中有两个问题。
1.你没有抛出错误。确保您还通过在代码中添加.catch()块来处理任何潜在的错误。
1.您不应该在变量中接收.then()的值,而是在.then()块中访问它。
例如

function addAdultInDB(name, age) {
  return new Promise((resolve, reject) => {
    if (age < 18) {
      reject("Not a valid age");
    }
    setTimeout(() => {
      resolve(`Added into db ${name}-${age}`);
    }, 100);
  });
}

const result = addAdultInDB("Ashutosh", 20)
  .then((data) => {
    console.log("data: ", data);
  })
  .catch((err) => {
    console.log("error:", err);
  });
console.log("result======", result);

查看如何首先打印结果,然后将数据记录到控制台中。

相关问题