JS Promise DAY77

常见的非同步问题(不限于 AJAX)

回呼地狱写法不一致无法同时执行(jQuery有并行语法,但不直觉)

Promise 可解决上述问题
MDN: https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Promise
http://img2.58codes.com/2024/201230391ITyo4cs5i.jpg
参考来源: https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Promise


function PromiseFn(num){    return new Promise((reslove,reject)=>{        setTimeout(()=>{            if(num){                reslove('success')            }else{                reject('fail');            }        },10)    })}PromiseFn(1)    .then(res=>{        console.log(res);    })    .catch(res=>{        console.log(res);    })

Promise Chain

function PromiseFn(num){    return new Promise((reslove,reject)=>{        setTimeout(()=>{            if(num){                reslove(`success${num}`)            }else{                reject('fail');            }        },10)    })}PromiseFn(1)    .then(res=>{        console.log(res);        return PromiseFn(2)    })    .then(res=>{        console.log(res);        return PromiseFn(3)    })    .then(res=>{        console.log(res);    })    .catch(res=>{        console.log(res);    })

这里要说明一下
then 其实可以接收成功、失败,但大多用来接收成功

// 利用两个callback functionfunction PromiseFn(num){    return new Promise((reslove,reject)=>{        setTimeout(()=>{            if(num){                reslove(`success${num}`)            }else{                reject('fail');            }        },10)    })}PromiseFn(0)    .then(res=>{        console.log(res);    },rej=>{        console.log(rej);    })    

Promise 常用方法

Promise.all
同时发出多个请求,当所有请求完成才进下一步

function PromiseFn(num,time = 500){    return new Promise((reslove,reject)=>{        setTimeout(()=>{            if(num){                reslove(`成功${num}`)            }else{                reject('fail');            }        },time)    })}Promise.all([    PromiseFn(1,500),    PromiseFn(2,2500),    PromiseFn(3,1500),])  .then(res=>{    console.log(res[0],res[1],res[2]);})

promise.all只要有一个被拒绝,就会直接进入catch

Promise.race
会回传第一个完成的结果

function PromiseFn(num,time = 500){    return new Promise((reslove,reject)=>{        setTimeout(()=>{            if(num){                reslove(`成功${num}`)            }else{                reject('fail');            }        },time)    })}Promise.race([    PromiseFn(1,5000),    PromiseFn(2,100),    PromiseFn(3,1500),])  .then(res=>{    console.log(res); // 成功 2})

Promise 与 Ajax

let url = 'https://jsonplaceholder.typicode.com/' ;function get(url){    return new Promise((reslove,reject)=>{        let xhr = new XMLHttpRequest();        xhr.open('get',url);        xhr.onload = function(){            if(xhr.status == 200){                reslove(xhr.response)            }else{                reject('失败')            }        }        xhr.send();    })}get(url)    .then(res=>{        console.log(res);    })

那 JS核心 我们就介绍到这里
若有任何问题 或 内容有误
都可以跟我说唷http://img2.58codes.com/2024/emoticon41.gif


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章