为什么异步/等待函数在某处工作而不在其他地方?

问题描述 投票:0回答:1

有时代码会让你发疯,因为你知道答案必须简单。

考虑这个工作函数(我使用firestore):

async function getHousing(id) {
  const housing = await db
    .collection('HOUSINGS')
    .doc(id)
    .get()
    .then(doc => {
      if (!doc.exists) logger.debug('No such housing')
      return doc.data()
    })
    .catch(e => {
      logger.error(e)
      return
    })
  return housing
}

module.exports.getHousing = getHousing

当我在某处使用它时,requiring相应地,它就像一个魅力,也就是没有错误:

const { getHousing } = require('../models/housing')

async function getHousings(user) {

  ...

  for (let house of allowedHousings) {
    let housing = await getHousing(id)    
  }

  ...

  return someStuff
}

但是,当我在其他地方使用它时,需要采用相同的方法,我收到了一个错误:error: getHousing is not a function

const { getHousing } = require('../models/housing')

async function saveProp(data) {
  try {
    await db
      .collection('PROPS')
      .doc(data.ID.PROP)
      .set(data)

    // data.ID.HOUSING is the correct ID
    const housing = await getHousing(data.ID.HOUSING)

    return housing
  } catch (e) {
    logger.error(e)
  }
}

我真的不明白为什么。你有什么线索吗?谢谢

编辑:事实上,当我切换另一个异步功能也工作在某处(saveHousing()),它不再工作到saveProp() fn ...很奇怪,但不帮我调试这个...

javascript function error-handling async-await
1个回答
0
投票

经过一段时间试图调试......我找到了答案,功能完美无缺,但有一种循环依赖与我所有的require()

const { deleteProp } = require('../models/prop')移动到函数内而不是文件顶部后,它可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.