什么时候应该使用JavaScript中的回调函数

时间:2018-11-23 12:53:33

标签: node.js

有人可以解释一下我们何时应该使用回调函数吗? 就像这里给出的链接代码一样 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。那么我们如何知道何时使用回调呢?

2 个答案:

答案 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))
})
}
}