2020-11-01

//Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大
// Promise简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
// 实例化Promise对象
// 有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。
// 只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。
// 这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。
// 一旦状态改变,就不会再变,任何时候都可以得到这个结果。

const a = new Promise((resolve, reject) => {
    setTimeout(() => {
        // let data = 'success'
        // resolve(data)
        let error = 'failed'
        reject(error)
    }, 1000)
})
// 一般.then回调成功resolve方法,.catch获取.reject回调
// .then后面跟两个方法第二个默认为reject的回调,外部catch就无法捕捉reject回调了
a.then((response) => {
    // 调用resolve
    console.log(response)
}, (error) => {
    // 调用resolve
    console.log(error + '1')
})

a.then((response) => {
    // 调用resolve
    console.log(response)
}).catch((error) => {
    // 调用resolve
    console.log(error + '2')
})

// 读取文件的内容,确认已安装node
const fs = require('fs');
const { resolve } = require('path')
// fs.readFile('./data.json',(err,data)=>{
// 读取失败抛出错误
//     if(err) throw err;
// 成功输出内容
//     console.log(data.toString());
// });
// const readJson = new Promise((resolve, reject) => {
//     fs.readFile('./data/data.json', (err, data) => {
//         if (err) reject(err);
//         resolve(data)
//     });
// })
// readJson.then((data) => {
//     console.log(data.toString())
// }).catch((error) => {
//     console.log(error)
//     console.log('读取失败')
// })
// 封装ajax
// let req = new Promise((resolve, reject) => {
//     const xhr = new XMLHttpRequest();//创建对象
//     xhr.open("GET", "https://api.apiopen.top/getJoke1");//初始化
//     xhr.send();//发送请求
//     xhr.onreadystatechange = () => {
//         console.log(xhr.readyState)
//         if (xhr.readyState == 4) {//判断阶段
//             // 判断响应码
//             if (xhr.status >= 200 && xhr.status < 300) {
//                 // console.log(xhr.response)
//                 resolve(xhr.response)
//             } else {
//                 console.log(xhr.status)
//                 reject(xhr.status)
//             }
//         }
//     }
// })

// let result = req.then((response) => {
//     console.log(JSON.parse(response).code)
// })
// req.catch((error) => {
//     console.log(error)
// })
// then方法的返回结果也是Promise对象,状态由回调函数的执行结果决定
// 1、如果回调函数返回结果为非promise类型的属性则状态为成功 ,返回值为对象的成功值
// console.log(result)
const req2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        // let data = 'success'
        // resolve(data)
        let error = 'failed'
        resolve(123)
    }, 1000)
})
// result2的也是promise,由回调函数的执行结果决定
result2 = req2.then((response) => {
    console.log(response)
    // 1、非Promise类型的属性由req2的结果决定
    // return '2'
    // 2、promise对象则由下面这个promise对象决定
    // return new Promise((resolve,reject)=>{
    //     resolve('success')
    //     reject('error')
    // })
    // 3、抛出错误结果是失败的
    throw new Error('error2')
})
result2.then((data)=>{
    console.log(data)
}).catch(error=>{
    console.log(error)
})

// Promise可以链式调用

let p = new Promise(resolve=>{
    setTimeout(()=>{
        resolve('111')
    },2000)
})
p.then(rep=>{
    console.log(rep)
    return new Promise(resolve=>{
        setTimeout(()=>{
            resolve('222')
        })
    },2000)
}).then(rep=>{
    console.log(rep)
    
    return new Promise(resolve=>{
        setTimeout(()=>{
            resolve('333')
        })
    },3000)
}).then(rep=>{
    console.log(rep)
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            reject('444')
        })
    })
}).catch(rep=>{
    console.log(rep)
})
const fs = require('fs')
const readJson = new Promise((resolve, reject) => {
    fs.readFile('./es6/20201003/data/data.json', (err, data) => {
        if (err) reject(err);
        resolve(data)
    });
})
let arr = []
readJson.then((data) => {
    console.log(data.toString())
    arr.push(data.toString())
    return new Promise(resolve=>{
        fs.readFile('./es6/20201003/data/data1.json', (err, data) => {
            if (err) reject(err);
            resolve(data)
        });
    })
}).then((data) => {
    console.log(data.toString())
    arr.push(data.toString())
    return new Promise(resolve=>{
        fs.readFile('./es6/20201003/data/data2.json', (err, data) => {
            if (err) reject(err);
            resolve(data)
        });
    })
}).then((data) => {
    arr.push(data.toString())
    console.log(data.toString())
    console.log(arr)
})

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值