Promies的概念 鏈式呼叫
阿新 • • 發佈:2022-12-02
axios基於promis的API進行封裝的
Promise主要解決了非同步操作 回撥函式的多層巢狀形成回撥地獄的問題 、
Promise-概念及基本使用
返回的是Promise Promise原型Prototype裡面有很多方法 .then .catch,rejevtd Promise是一個建構函式 p是例項化物件 return Promise例項化物件.then .then 會形成鏈式呼叫
Promise
可以用來解決上一節回撥函式巢狀的問題,mdn檢視如何使用它概念
<body>
<h2>測試axios返回的是否是Promise</h2>
<script src="./lib/axios.js"></script>
<script>
// axios基於promis的API進行封裝的
// const p = axios({}).then(() => {});
// console.log(p); //返回的是Promise Promise原型Prototype裡面有很多方法 .then .catch,rejevtd
// 兩種狀態只能執行 一次 誰寫上面誰先執行
// Promise是一個建構函式 p是例項化物件 return Promise例項化物件.then .then 會形成鏈式呼叫
const p = new Promise((resolve, reject) => {
resolve(); //狀態成功時執行.then回撥函式
reject(); //狀態失敗時執行.catch回撥函式
});
p.then(() => {
console.log("成功了");
}).catch(() => {
console.log("我失敗了");
});
// 過一秒 引數傳過去 ‘成功’
const p1 = new Promise((resolve, reject) => {
// console.log("resolve是一個方法", resolve);//ƒ () { [native code] }
setTimeout(() => {
resolve("我成功了");
}, 1000);
}).then((res) => {
console.log("res是resolve成功時傳過來的引數", res);
});
</script>
</body>
Promise的鏈式呼叫
<body>
<h2>鏈式呼叫</h2>
<script src="./lib/axios.js"></script>
<script>
// resolve reject (形參) 名字可以改,但是建議別改
// 例項化物件可以調原型上的方法 可以進行鏈式呼叫
// Promise是一個建構函式 p是例項化物件 return Promise例項化物件.then .then 形成鏈式呼叫
const p = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("我是1");
}, 1000);
})
.then((res) => {
console.log("1", res);
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("我是2");
}, 2000);
});
})
.then((res) => {
console.log("2", res);
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("我是3");
}, 3000);
});
})
.then((res) => {
console.log("3", res);
});
</script>
</body>