ES6 Promise 参考和总结

9 篇文章 0 订阅
2 篇文章 0 订阅

JS promise 简介
https://developers.google.com/web/fundamentals/primers/promises?hl=zh-cn

Promise 对象
http://es6.ruanyifeng.com/#docs/promise

MDN Promise
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise

谈谈 ES6 的 Promise 对象
https://segmentfault.com/a/1190000002928371

https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014345008539155e93fc16046d4bb7854943814c4f9dc2000
JavaScript:彻底理解同步、异步和事件循环(Event Loop)

https://segmentfault.com/a/1190000004322358

JavaScript 运行机制详解(理解同步、异步和事件循环)
https://juejin.im/entry/59716961f265da6c2328af95

视频:

JavaScript Promises In 10 Minutes

https://youtu.be/DHvZLI7Db8E
Promise最基础示例

let p  = new Promise((resolve,reject)=>{
    let a = 2;
    if(Math.random()>0.5){
        resolve('Success');//如果条件如此我按resovle这么做
    }else{
        reject('Failure');//如果条件如此我按reject这么做
    }
});

p.then((message)=>{//message即为resole('balabal')定义的时候,要传的参数
    console.log('This is in then '+message);//This is in then Success
}).catch((message)=>{
    console.log('This is in catch '+message);//This is in catch Failure
})

Promise.all()的应用

const recordViewOne = new Promise((resolve,reject)=>{
    resolve('Video1 Recorded')
})
const recordViewTwo = new Promise((resolve,reject)=>{
    resolve('Video2 Recorded')
})
const recordViewThree = new Promise((resolve,reject)=>{
    setTimeout(()=>resolve('Video3 Recorded'),3000);
})
Promise.all([    
    recordViewThree,
     recordViewOne,     
    recordViewTwo,//这里的顺序3,1,2和打印的顺序一样。即全都执行完了,再按顺序打印。
]).then((msg)=>{
    console.log(msg);
    //Array(3) ["Video3 Recorded", "Video1 Recorded", "Video2 Recorded"]//3,1,2
})
Promise.race([ //只返回最早完成的一个   
    recordViewThree,
     recordViewOne,     
    recordViewTwo,//这里的顺序3,1,2和打印的顺序一样。即全都执行完了,再按顺序打印。
]).then((msg)=>{
    console.log(msg);
    //Video1 Recorded
})

//无论是all还是race都是同时执行的

JavaScript Async Await

https://youtu.be/V_Kr9OSfDeU
asyncawait是Promise操作的语法糖。

//Part  3 async await
function makeRequest(location) {
    console.log(`Makeing request to ${location}`)
    return new Promise((resolve, reject) => {
        if (location == 'Google') {
            resolve('Google says hi')
        } else {
            reject('We can only talk to Google')
        }
    })
}

function processRequest(response) {
    return new Promise((resolve, reject) => {
        console.log(`Processing response`)
        resolve(`Extra Infomation +${response}`);
    })
}

// 简单测试makeRequest()
// makeRequest('Youtube')
// .then(msg=>{console.log(msg)})
// .catch(msg=>{console.log(msg)});

// 组合 makeRequest()和processRequest()
makeRequest('Google').then(response=>{
    console.log('Resonse Recived')
    return processRequest(response)
}).then(processedResponse=>{
    console.log(processedResponse)
})
//处理了又return一个Promise,于是可以链式调用

//使用async 和 await 简化代码
async function doWork(){
    const response = await makeRequest('Google');
    console.log('Resonse Recived')
    const processedResponse = await processRequest(response);
    console.log(processedResponse)
}
doWork();

语法糖
使用了await之后,发现reject 无法正确的处理了。
try-catch
解决办法:try-catch

async function doWork(){
    try {
        const response = await makeRequest('Fackbook');
    console.log('Resonse Recived')
    const processedResponse = await processRequest(response);
    console.log(processedResponse)
    } catch (err) {
        console.log(err)
    }    
}
doWork();

如此便解决了。
catch-err

利用Promise 和Async Await 的实例 Vuex 组合复杂的 Action
https://vuex.vuejs.org/zh/guide/actions.html#组合-action

练习环境 VScode + Chrome
http://shooterblog.site/2018/05/19/手把手教你用Vscode Debugger调试代码/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值