回调的形式
image.png
1、Node.js的error-first形式
fs.readFile('./1.txt', (error, content)=>{
if(error){
// 失败
}else{
// 成功
}
})
image.png
2、jQuery 的 success / error 形式
$.ajax({
url:'/xxx',
success:()=>{},
error: ()=>{}
})
3、jQuery 的 done / fail / always 形式
$.ajax({
url:'/xxx',
}).done( ()=>{} ).fail( ()=>{} ).always( ()=> {})
4、Promise 的 then 形式
$.ajax({
url:'/xxx',
}).then( ()=>{}, ()=>{} ).then( ()=>{})
promise
Promise/A+ 规范:[https://segmentfault.com/a/1190000002452115]
axios.ajax({
url: './'
}).then(s1,e1)
.then(s2,e2)
.then(s3,e3)
如果前面能够访问到则执行s1,如果不能则执行e1
无论s1还是e1都各自能处理好,则执行s2,如果不能执行好,则执行e2
无论s2还是e2都各自能处理好,则执行s3,如果不能执行好,则执行e3
image.png
自己写Promise
写一个函数
这个函数,要返回一个Promise(为什么?因为需要用到promise的then方法),别人用你这个函数,就可以then了
image.png
image.png
image.png
async/await
image.png
image.png
image.png
image.png
let promise1 = await new Promise(function(resolve) {
resolve(1);
});
undefined
promise1
1
image.png
image.png
实现一个promise.all
function PromiseAll (promises) {
return new Promise (function(resolve,reject) {
if (!Array.isArray(promises)) {
return reject(new TypeError('arguments must be an array'))
}
let resolvesCount = 0
let promiseNum = promises.length
let resolveValues = new Array(promiseNum) //一个数量一样的新数组
for(let i = 0; i<promiseNum; i++) {
Promise.resolve(promises[i]).then(function(value){
resolvesCount++
resolveValues[i] = value
if(resolvesCount === promiseNum){
return resolve (resolveValues)
}
},function(reason){return reject(reason)})
}
})
}
var p1 = Promise.resolve(1),
p2 = Promise.resolve(2),
p3 = Promise.resolve(3);
PromiseAll([p1,p2,p3]).then(results =>{console.log(results)})
网友评论