setTimeout ( function ()  { 
}, time ) 
function  callback ()  { 
  console . log ( " This is the test. " ) 
} 
function  callback_test ( time ,  callback )  { 
  setTimeout ( function (){ 
    console . log ( " test " ) 
    let  result  =  0 
    callback ( 0 ) 
  }, time ) 
} 
    Enter fullscreen mode 
    Exit fullscreen mode 
     
 
 
/*
需求:异步的按顺序去读取1.txt、2.txt、3.txt文件的内容
假设 1.txt内容为111 、2.txt内容为222、3.txt内容为333
*/ 
var   fs  =  require ( ' fs ' ); 、 
 fs . readFile ( ' ./files/1.txt ' , ' utf8 ' , function ( err , data ){ 
   if ( err ){ 
     throw  err ; 
   } 
   console . log ( data ); 
 }) 
 fs . readFile ( ' ./files/1.txt ' , ' utf8 ' , function ( err , data ){ 
   if ( err ){ 
     throw  err ; 
   } 
   console . log ( data ); 
 }) 
 fs . readFile ( ' ./files/1.txt ' , ' utf8 ' , function ( err , data ){ 
   if ( err ){ 
     throw  err ; 
   } 
   console . log ( data ); 
 }) 
/*
 结果:111 222 333。(好像满足需求啊)
*/ 
/* 
问题:上面的代码虽然正常按照顺序读取了文件,因为文件的内容都非常少,io读取耗时少,但当2.txt内容较多时候,2.txt的内容是最后输出的。因为他们都是异步操作,不知道谁先读取完。 这得取决于异步任务IO的耗时。
*/ 
/*
常规解决办法:
在第一个异步任务读取成功之后再读取第二个异步任务,
第二成功后,在读取第三个异步任务
*/ 
//读取第一个异步任务 
fs . readFile ( ' ./files/1.txt ' , ' utf8 ' , function ( err , data ){ 
  if ( err ){ 
    throw  err ; 
  } 
  console . log ( data ); 
  //读取第二个异步任务 
  fs . readFile ( ' ./files/2.txt ' , ' utf8 ' , function ( err , data ){ 
    console . log ( data ); 
    //读取第三个异步任务 
    fs . readFile ( ' ./files/3.txt ' , ' utf8 ' , function ( err , data ){ 
      console . log ( data ); 
    }) 
  }) 
}) 
/* 
结果: 111 222 333 (这必须按照顺序输出的,结果杠杆的)  
*/ 
/*
问题:
以上按照顺序执行多个异步任务产生的问题:`回调地狱`问题(层层包裹进行回调,代码也不够优雅)
*/ 
/* 
解决办法:采用es6,提供的promise来解决上述产生的问题。
*/ 
    Enter fullscreen mode 
    Exit fullscreen mode 
     
 
 
let  test  =  new  Promise (( resolve ,  reject ) => { 
  if ( true )  { 
    return  resolve ( " secceed. " ) 
  }  else  { 
    return  reject ( " failed " ) 
  } 
}) 
let  test001  =  function  method ( resolve ,  reject )  { 
  if ( false )  { 
    resolve ( " 1 " ) 
  } else  { 
    reject ( " 2 " ) 
  } 
} 
new  Promise ( test001 ). then (() =>  console . log ( " secceed " )). catch (() => console . log ( " failed " )) 
// new Promise(test001).then( 
//     function() { 
//       console.log("succeed!!!") 
//     } 
//   ) 
// .catch( 
//   function() { 
//     console.log("failed!!!") 
//   } 
// )  
    Enter fullscreen mode 
    Exit fullscreen mode 
     
 
 
             
              
Top comments (0)