next.js 承诺不起作用,但异步/等待方法起作用

o2g1uqev  于 2023-01-17  发布在  其他
关注(0)|答案(2)|浏览(121)

我正在试图找出为什么我无法从postgres数据库中检索数据。
当我使用async await时,它可以工作,但是当我尝试使用Promise和.then(result).catch(error)时,它就不工作了。
控制台日志显示Promise { <pending> }

获取用户

your text`const db = require("../config/db");

const getUsers = () => {
  const query = "SELECT * FROM users";
  const users = db
    .query(query)
    .then((result) => {
      return result.rows;
    })
    .catch((error) => {
      return error.message;
    });
  return users;
};

module.exports = {
  getUsers,
};

index.js(使用承诺)--不起作用。

const { getUsers } = require('../helpers/users')

export default function Home(props) {
  return (
    <ul>
      {props.name}
      {props.users.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}

    </ul>
  )
}

export function getServerSideProps(context) {

  const users = getUsers()
    .then((result) => {
      return result.rows;
    })
    .catch((error) => {
      return error.message;
    })

  return {
    props: {
      users
    }
  }
}

index.js(使用异步/等待)--工作正常。

export async function getServerSideProps(context) {

  const users = await getUsers()

  return {
    props: {
      users
    }
  }
}
o8x7eapl

o8x7eapl1#

这应该工作(根据下一个文档getServerSideProps是异步函数)。所以只需要添加async关键字并从该函数返回承诺:

export async function getServerSideProps(context) {

  return getUsers()
    .then((result) => {
      return {props:{user:result.rows}};
    })
    .catch((error) => {
      return {props:{user:error.message}};
    })
}
ajsxfq5m

ajsxfq5m2#

谢谢你们Andrey和Bergi。
因为它是Promise,所以我不必包含异步,但是其余的代码确实工作了!

export function getServerSideProps(context) {

  getUsers()
    .then((result) => {
      return {
        props: {
          users: result
        }
      }
    })
    .catch((error) => {
      return {
        props: {
          error: error.message
        }
      }
    })
}

相关问题