最近学ES6
,了解到promise
,可以通过then().then().then()
的方式解决回调地狱
想请问:
像下边的简单逻辑情况下,两者的功效可能一样的。
那么promise
还有什么优势吗?
如果有,在哪里,希望得到老司机码力加持,请不惜金码,敲上两行。
谢谢你的帮助
function afterSomeSeconds( callBackFn ){
setTimeout(()=>{
callBackFn('2秒过去了,异步执行结束');
}, 2 * 1000);
};
afterSomeSeconds(function toLog(msg){
console.log(msg)
});
console.log('主线程1');
// ▲传统回调,
// ——————————————————————————————————————————————————————————
// ▼ES6的Promise
function afterSomeSecondsPromise(){
return new Promise(function(resolve, reject){
setTimeout(()=>{
resolve('3秒过去了,异步执行结束');
}, 3 * 1000);
})
}
afterSomeSecondsPromise().then(msg=>{
console.log(msg)
});
console.log('主线程2');
控制台打印如下:
主线程1
主线程2
2秒过去了,异步执行结束
3秒过去了,异步执行结束
从本质来讲两者都能实现我们想要的功能,但真正投入开发,你会发现promise跟async/await搭配简直就是一把梭子。
利用promise跟async/await可以将异步操作改成‘伪同步’(实质还是异步),编码上思路更加顺溜了。
往往项目开发我们都会封装通用的请求函数
使用回调的封装就是
如何调用呢
当接口很多的时候,这种反复的操作能写到你烦。
那我们使用promise封装呢?结果会是怎么样
如何调用呢
一看码量减少了一半不止,而且封装了通用请求函数,可以对api做统一管理,放在一个api.js里。例如
以后每次调用接口都是简单的‘伪同步’
let user = await User.get();
let orders = await Orders.get();
是不是更加简洁了?