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