Javascript 使用async/await在fs.writeFile之后执行代码

Javascript 使用async/await在fs.writeFile之后执行代码,javascript,node.js,async-await,Javascript,Node.js,Async Await,我有一个函数,startSurvey,它在运行时检查.json文件中是否有问题。如果没有问题,它会从Typeform中提取一些问题,并使用saveForm将它们写入.json文件。在它编写之后,我想继续执行一些代码来读取.json文件并记录其内容。现在,等待saveForm()永远不会解析 我已经介绍了fs.readFile和fs.writeFile函数 //typeform-getter.js 常量fs=require('fs') const util=require('util') con

我有一个函数,
startSurvey
,它在运行时检查.json文件中是否有问题。如果没有问题,它会从Typeform中提取一些问题,并使用
saveForm
将它们写入.json文件。在它编写之后,我想继续执行一些代码来读取.json文件并记录其内容。现在,
等待saveForm()
永远不会解析

我已经介绍了fs.readFile和fs.writeFile函数

//typeform-getter.js
常量fs=require('fs')
const util=require('util')
const fetch=require('cross-fetch')
require('dotenv').config()
const conf=require(“../../private/conf.json”)
const typeformToken=conf.tokens.typeform
const writeFile=util.promisify(fs.writeFile)
const getForm=async()=>{
const form=等待获取(`https://api.typeform.com/forms/${process.env.FORM_ID}`{
标题:{
“授权”:`持有人${typeformToken}`
}
}).then(res=>res.json())
常量字段=form.fields
返回字段
}
const saveForm=async()=>{
const form=await getForm()
返回writeFile(uu dirname+'/../data/questions.json',json.stringify(form))
。然后((e)=>{
如果(e)控制台错误(e)
else console.log('问题已保存')
回来
})
}

module.exports=saveForm
我不知道您的确切错误,但您的代码有多处错误:

您错误地使用了
fs.writeFile
的承诺版本,如果出现错误,承诺将被拒绝,您将无法获得以错误作为已解决值的已解决承诺,这就是您正在做的。 使用路径。连接路径,而不是连接路径

startSurvey
中,您使用的是
console.log(questions)
,但如果
questions.json
不存在,则不会有任何数据,这应该在您第一次运行程序时发生,因为它是由
saveForm
填充的,因此您可能希望在
saveForm
中返回问题

因此,
saveForm
应该如下所示:

const saveForm = async () => {
    const form = await getForm();
    const filePath = path.join(path.__dirname, '..', 'data', 'questions.json');
    await writeFile(filePath, JSON.stringify(form));

    console.log('questions saved');

    return form;          
 }
startSurvey

const startSurvey = async (ctx) => {
  try {
    const questions = await getQuestions() || await saveForm();
    // This will be logged, unless saveForm rejects
    // In your code getQuestions always resolves
    console.log(questions); 
  } catch (error) {
    console.error('error: ', error)
  }
}
controller.js中,您正在
saveForm
上使用
util.promisify

因此,它应该是:

const saveForm = require('./functions/typeform-getter')

你的代码有很多问题,但是,
console.error('error:',error)
执行了吗?不,没有执行……在
之后放一个
console.log
,等待getQuestions
并告诉我是否调用了它。“
。然后((e)=>{if(e)console.error(e)
”这不是你处理错误的方式promises@MarcosCasagrandewait getquetions()之后的console.log被称为saw缺少fs.for writeFile