非同期コールバック関数、promiseの例、捕獲/処理異常、処理コールバック地獄

12881 ワード

非同期コールバック関数
function fun1(callback){
     setTimeout(() => {
         var a=100;
         callback(a)
     }, 1000);
 }
fun1(function(a){
    console.log(a)
})
promiseを実行します.thenによって成功と失敗のコールバックを指定します.
function prom(path){
    var promise = new Promise(function(resolve,reject){
        fs.readFile(path,'utf-8',(err,data)=>{
            if(err) return reject(err)
            resolve(data)
        })
    })
    //  promise  
    return promise
}
var promNwe = prom('./text.txt')
//  promise      2    ,          ,.then   ,      
promNwe.then(function(res){
    console.log(res)
},function(err){
    console.log(err)
})
地獄のリベンジ
prom('./text.txt')
    .then(function (res) {
        console.log(res)
        prom('./text1.txt').then(function (res) {
            console.log(res)
            prom('./text2.txt').then(function (res) {
                console.log(res)
            })
        })
    })
プロミセを使って地獄に戻り、異常な捕獲を解決します.
function prom(path){
    var promise = new Promise(function(resolve,reject){
        fs.readFile(path,'utf-8',(err,data)=>{
            if(err) return reject(err)
            resolve(data)
        })
    })
    //  promise  
    return promise
}
//  promise      2    ,          ,.then   ,      

prom('./text.txt')
.then(function(res){
//                 ,             ,     
    console.log(res)
    return prom('./text1.txt')
},function(err){
    console.log('       ',err)
    return prom('./text1.txt')
})
.then(function(res){
    //   .then       .then   prom()
    console.log(res)
    return prom('./text2.txt')
})
.then(function(res){
    console.log(res)
}).catch(function(err){
	//          ,      catch  ,                    
    console.log('       ',err)
})