今天开始和大家一起系统的学习ES6+,每天3分钟,用一把斗地主的时间,重学ES6+,今天介绍的是ES6中新增的内容Promise
/**
* 这种回调的方式有很多的弊端:
* 1> 如果是我们自己封装的requestData,那么我们在封装的时候必须要自己设计好callback名称, 并且使用好
* 2> 如果我们使用的是别人封装的requestData或者一些第三方库, 那么我们必须去看别人的源码或者文档, 才知道它这个函数需要怎么去获取到结果
*/
// request.js
function requestData(url, successCallback, failtureCallback) {
// 模拟网络请求
setTimeout(() => {
// 拿到请求的结果
// url传入的是yz, 请求成功
if (url === "yz") {
// 成功
let names = ["abc", "cba", "nba"]
successCallback(names)
} else { // 否则请求失败
// 失败
let errMessage = "请求失败, url错误"
failtureCallback(errMessage)
}
}, 3000);
}
// main.js
requestData("kobe", (res) => {
console.log(res)
}, (err) => {
console.log(err)
})
我们来看一下Promise代码结构:
下面Promise使用过程,我们可以将它划分成三个状态:
function foo() {
// Promise
return new Promise((resolve, reject) => {
resolve("success message")
// reject("failture message")
})
}
const fooPromise = foo()
// then方法传入的回调函数两个回调函数:
// > 第一个回调函数, 会在Promise执行resolve函数时, 被回调
// > 第二个回调函数, 会在Promise执行reject函数时, 被回调
fooPromise.then((res) => {
console.log(res)
}, (err) => {
console.log(err)
})
//catch方法传入的回调函数, 会在Promise执行reject函数时, 被回调
fooPromise.catch(() => {
})
// 传入的这个函数, 被称之为 executor
// > resolve: 回调函数, 在成功时, 回调resolve函数
// > reject: 回调函数, 在失败时, 回调reject函数
const promise = new Promise((resolve, reject) => {
console.log("promise传入的函数被执行了")
// resolve()
reject()
})
promise.then(() => {
})
promise.catch(() => {
})
那么有了Promise,我们就可以将之前的代码进行重构了:
// request.js
function requestData(url,) {
// 异步请求的代码会被放入到executor中
return new Promise((resolve, reject) => {
// 模拟网络请求
setTimeout(() => {
// 拿到请求的结果
// url传入的是yz, 请求成功
if (url === "yz") {
// 成功
let names = ["abc", "cba", "nba"]
resolve(names)
} else { // 否则请求失败
// 失败
let errMessage = "请求失败, url错误"
reject(errMessage)
}
}, 3000);
})
}
// main.js
const promise = requestData("coderwhy")
promise.then((res) => {
console.log("请求成功:", res)
}, (err) => {
console.log("请求失败:", err)
})
后面会继续介绍 promise的三种状态,promise的方法,手写promise,敬请期待。最近略忙,日更活动还有10篇任务,等忙完这段时间一定好好写博客。就不求赞了!
阅读量:2011
点赞量:0
收藏量:0