回調的形式
1姑宽、Node.js的error-first形式
fs.readFile('./1.txt', (error, content)=>{
if(error){
// 失敗
}else{
// 成功
}
})
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+ 規(guī)范:[https://segmentfault.com/a/1190000002452115]
axios.ajax({
url: './'
}).then(s1,e1)
.then(s2,e2)
.then(s3,e3)
如果前面能夠訪問到則執(zhí)行s1醇疼,如果不能則執(zhí)行e1
無論s1還是e1都各自能處理好硕并,則執(zhí)行s2,如果不能執(zhí)行好秧荆,則執(zhí)行e2
無論s2還是e2都各自能處理好倔毙,則執(zhí)行s3,如果不能執(zhí)行好乙濒,則執(zhí)行e3
自己寫Promise
寫一個函數(shù)
這個函數(shù)陕赃,要返回一個Promise(為什么?因為需要用到promise的then方法)颁股,別人用你這個函數(shù)么库,就可以then了
async/await
let promise1 = await new Promise(function(resolve) {
resolve(1);
});
undefined
promise1
1
實現(xiàn)一個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) //一個數(shù)量一樣的新數(shù)組
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)})