首页 > 解决方案 > 执行函数的值返回一个承诺

问题描述

我有这段代码,在第二个函数中,我检查数据库,如果我在函数内记录东西,它记录正​​常,但是如果我分配一个 var 并调用函数,因为它返回 true 或 false,我得到一个未决的承诺

const mongoose = require('mongoose')
const config = require('./config.json')
const schema = require('./data')
const mongoactivate = async(config) => {
  await mongoose.connect(config.mongo, {
    useUnifiedTopology: true,
    useNewUrlParser: true
  })
}
mongoactivate(config)
const check = async(p, q) => {
  let data = await schema.findOne({
    username: p,
    pass: q
  })
  let cor = (data === null) ? false : true;
  console.log(cor)
}
const ans = check("p", "q")
console.log(ans)

标签: javascriptnode.jsmongodbmongoose

解决方案


您不是在等待该mongoactivate()功能。异步函数总是返回一个 Promise。此外,您的check函数永远不会返回任何内容,因此ans不会是您期望的值。返回cor函数末尾的变量。

const mongoose = require('mongoose')
const config = require('./config.json')
const schema = require('./data')

const mongoactivate = async (config) => {
  await mongoose.connect(config.mongo, {
    useUnifiedTopology: true,
    useNewUrlParser: true
  })
}

const check = async (p, q) => {
  let data = await schema.findOne({
    username: p,
    pass: q
  })
  let cor = (data === null) ? false : true;
  return cor;
}

(async () => {
  await mongoactivate(config)
  const ans = await check("p", "q")
  console.log(ans)
})()

推荐阅读