首页 > 解决方案 > 带有已获取实例的 console.log() 在异步函数中停止执行

问题描述

我在 Express 应用程序中使用 Sequelize,但无法弄清楚如何在async函数中使用 console.log()。每当我想打印从 db 获取的实例时,控制台日志都会停止执行。

这是我尝试过的(每个示例都在单独的尝试中):

updateUser: async (_, { id, ...args }, { User }) => {
  const user = await User.findById(3)
  // will later do some update to user here
  await Promise.resolve(console.log('user: ', user)) // halts the execution
  Promise.resolve(console.log('user: ', user)) // halts the execution
  await console.log('user: ', user) // halts the execution
  console.log('user: ', await user) // halts the execution
  console.log('user: ', user) // halts the execution
  console.log('only a string') // works!
  return user
},      

我也以 0 成功尝试了以下方法:

const user = await User.findById(3).then(user => {
  console.log('user: ', user)
})

标签: javascriptnode.jsasync-awaitsequelize.jses6-promise

解决方案


console.log什么都不停止,await确实

这将停止执行,直到User找到一些东西:

const user = await User.findById(3).then(user => {
  console.log('user: ', user)
})

直到aFunction有回应:

const user = await aFunction(anArg).then((do) => something);

你想要做的是:

var value; // have this somewhere or something similar
aFunction(anArg).then((res) => { value = res; })

或者在你的情况下:

var savedUser; // have this somewhere or something similar
User.findById(3).then((user) => { savedUser = user; console.log('user: ', user); })

推荐阅读