为什么同一个异步/等待功能在某处而不是其他地方起作用?

时间:2019-04-27 06:58:45

标签: javascript function error-handling async-await

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

考虑此工作功能(我使用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()中不再起作用了……很奇怪,但无济于事我调试一下...

1 个答案:

答案 0 :(得分:0)

经过一段时间的调试...我找到了答案,这些功能可以正常运行,但是我所有的require()都有一种循环依赖

const { deleteProp } = require('../models/prop') 移入内部而不是位于文件顶部之后,该函数便可以正常工作。