有人可以解释一下我们何时应该使用回调函数吗?
就像这里给出的链接代码一样
snip of code is given here
我们看到在function daysBetween(first, second) {
// Copy date parts of the timestamps, discarding the time parts.
var one = new Date(first.getFullYear(), first.getMonth(), first.getDate());
var two = new Date(second.getFullYear(), second.getMonth(), second.getDate());
// Do the math.
var millisecondsPerDay = 1000 * 60 * 60 * 24;
var millisBetween = two.getTime() - one.getTime();
var days = millisBetween / millisecondsPerDay;
// Round down.
return Math.floor(days);
}
内的readFile
方法中,我们使用了fetchAll(cb)
表示的callback
来读取内容,(cb)
和parse
以及无论如何,但是在stringify
的{{1}}方法中,不需要使用readFile
。那么我们如何知道何时使用回调呢?
答案 0 :(得分:0)
很简单。只要知道您使用的方法的本质是什么。 readFile是异步,因此需要回调。它的基本意思是“嘿,我将阅读您所询问的文件,但是当我阅读它时,您可以做其他事情而不是等待我,等我完成后,我会回到您身边。”在save()的readFile方法中,您仍然传递一个回调:
(err, fileContent) => {
// do stuff
}
回调用于处理异步代码,因此我们可以在发生其他事情时继续工作,而我们不想停止并等待它。
答案 1 :(得分:0)
const fs=require('fs')
const path=require('path')
module.exports=class Prroduct{
constructor(title,imgurl,description,price){
this.title=title
this.imgurl=imgurl
this.description=description
this.price=price
}
save(){
const p=path.join(__dirname,'../','data','products.json')
fs.readFile(p,(err,fileContent)=>{
let products=[]
if(!err){
products=JSON.parse(fileContent)
}
products.push(this)
fs.writeFile(p,JSON.stringify(products),(err)=>{
console.log(err)
})
})
}
static fetchAll(cb){
const p=path.join(__dirname,'../','data','products.json')
fs.readFile(p,(err,fileContent)=>{
if(err){
cb([])
}
cb(JSON.parse(fileContent))
})
}
}