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)