本文摘自PHP中文网,作者藏色散人,侵删。

一、 promise应用场景
1 解决回调地狱
比如我们经常可能需要异步请求一个数据之后作为下一个异步操作的入参
1 2 3 4 5 6 7 8 9 10 11 | getData( function (a){
getMoreData(a, function (b){
getMoreData(b, function (c){
getMoreData(c, function (d){
getMoreData(d, function (e){
...
});
});
});
});
});
|
可以发现上面的代码看起来是非常可怕的,层层嵌套,如果在加上复杂的逻辑判断,代码可读性会变得非常差。
但是你如果使用promise的话:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function getData() {
return new Promise( function (resolve, reject) {
resolve(1);
});
}
function getMoreData(arg) {
return new Promise( function (resolve, reject) {
resolve(arg + 10);
});
}
getData().then( function (a) {
console.log(a);
return getMoreData(a);
}).then( function (b) {
console.log(b);
})
|
把上面代码再简洁点儿
1 2 3 | getData()
.then(a => getMoreData(a))
.then(b => console.log(b));
|
2 promise 可以实现在多个请求发送完成后 再得到或者处理某个结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | let fs = require ( 'fs' );
fs.readFile( './1.txt' , 'utf8' , function (err, data) {
console.log(data);
})
fs.readFile( './2.txt' , 'utf8' , function (err, data) {
console.log(data);
})
使用promise的话就可以实现:
let fs = require ( 'fs' );
function read(url){
return new Promise( function (resolve,reject){
fs.readFile(url, 'utf8' , function (err,data){
if (err)reject(err);
resolve(data);
})
})
}
Promise.all([read( '1.txt' ),read( '2.txt' )]).then(data=>{
console.log(data);
},err=>{
console.log(err);
});
|
二、promise原理实现
阅读剩余部分
相关阅读 >>
promise是什么意思
实现promise的手把手教程
es6之promise的学习
深入浅析 promise 比 settimeout() 快的原因
理解js原型链,继承和promis
es6-promise源码的分析
promise原理
如何将 javascript 回调转换为 promise?方法介绍
需要真正明白的promise
更多相关阅读请进入《promise》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » promise原理