## promise用法
#### 對比傳統回調函數與Pormise的寫法
##### 傳統回調函數
```js
// 聲明函數
function run(callback) {
let parmas = 0;
if (callback) callback(parmas);
};
function fnStep1(callback) {
let parmas = 123;
if (callback) callback(parmas);
};
function fnStep2(callback) {
let parmas = 456;
if (callback) callback(parmas);
};
function fnStep3(callback) {
let parmas = 789;
if (callback) callback(parmas);
};
// fnStep4 ...
// 傳統使用回調的寫法
run(function (parmas) {
// parmas = 0
console.log(parmas);
fnStep1(function (parmas1) {
// parmas = 123
console.log(parmas1);
fnStep2(function (parmas2) {
// parmas = 456
console.log(parmas2);
fnStep3(function (parmas3) {
// ...
// 一直嵌套
});
});
});
});
```
##### Promise的寫法
```js
let p = new Promise((resolve, reject) => {
// ?異步操作,最終調用:
//
const parmas = 0;
resolve(parmas); // fulfilled
// ?或
// reject("failure reason"); // rejected
})
p
.then(
(parmas) => {
// parmas,resolve返回的值
console.log(parmas);
// 你的代碼塊 code...
return 123; //返回值給下一個then
}
)
.then(
(parmas) => {
// parmas,上一個then返回的值
console.log(parmas);
// 你的代碼塊 code...
return 456; //返回值給下一個then
}
)
.then(
(parmas) => {
// parmas,上一個then返回的值
console.log(parmas);
// 你的代碼塊 code...
return 789; //返回值給下一個then
}
)
```
##### Promise要比傳統回調函數更簡潔直觀,可讀性更強。
###### 那如何使用Promise進行異步回調? 如何捕獲錯誤?
```js
// 聲明函數
function asyncFn(a) {
return new Promise((resolve, reject) => {
a += 1;
setTimeout(function () {
// 使用resolve則返回a
resolve(a);
// 使用reject則返回錯誤,并結束then的繼續向下執行,并會跳到catch
// reject(new Error("fail"));
}, 2000);
});
}
// 執行
asyncFn(1).then(
(a) => {
// 過了2秒后接收到a值 => 2
console.log(a);
const newVal = 5;
// const newVal = {a: 5};
// const newVal = new Promise((resolve, reject) =>{});
// 返回值可以是數字,字串,對象或者是 Promise
return newVal;
}
).then(
(newVal) => {
// newVal 獲得上一個then返回的值 或 返回的Promise的返回值
}
).catch(
(err)=>{
// 如用到reject,則會直接跳到此處
console.log(err)
}
);
```
- [分享]微信小程序入門與實戰
- 學習大綱
- 關于學習的一些常見問題
- 第一周
- 每周作業
- 玩練作業
- 知識點
- 正確設置PORT端口(windows/mac)
- 發布npm包
- 第二周
- 每周作業
- [作業一 (通關作業)](第二周/作業一 (通關作業).md)
- 作業二 (通關作業)
- 作業三 (通關作業)
- 作業四(可選)
- 作業五(可選)
- 知識點
- 原型鏈及繼承的理解
- 第三周
- 每周作業
- 作業一 (通關作業)
- 作業二 (通關作業)
- 作業三 (通關作業)
- 作業四(可選)
- 知識點
- 正則表達式常用方法
- promise用法
- 常用正則表達式大全
- 第四周
- 每周作業
- 玩練作業
- 知識點
- 第五周
- 每周作業
- 作業一(通關作業)
- 作業二 (通關作業)
- 作業三(玩練作業)
- 知識點
- 第六周
- 每周作業
- [作業一(通關作業)](第六周/作業一(通關作業).md)
- 知識點
- 第七周
- 每周作業
- 作業一(玩練)
- 作業二(玩練)
- 作業三(通關)
- 作業四(通關)
- 知識點
- 第八周
- 每周作業
- 作業一(玩練)
- 作業二(玩練)
- 作業三(通關)
- 知識點
- 第九周
- 每周作業
- 作業一(玩練)
- 作業二(玩練)
- 作業三(玩練)
- 作業四(通關)
- 知識點
- 第十周
- 每周作業
- 作業一(玩練)
- 知識點