使用回调函数实现异步任务
// 1.设计函数
function fn(counter, successCallback, failureCallback) {//异步任务setTimeout(() => {if(counter>0) {let sum =0 for(let i =0;isum += i}//在某一时刻只需要回调传入的函数//成功情况successCallback(sum)} else {// 失败情况failureCallback(`${counter}值错误`)}}, 2000)
}fn(94, (value) => {console.log("本次执行成功了:", value)
},(err) => {console.log("本次执行失败了:", err);
})
弊端:
一个
Promise
对象代表一个在这个 promise 被创建出来时不一定已知值的代理。它让你能够把异步操作最终的成功返回值或者失败原因和相应的处理程序关联起来。这样使得异步方法可以像同步方法那样返回值:异步方法并不会立即返回最终的值,而是会返回一个 promise,以便在未来某个时候把值交给使用者。
new Promise(executor)
一个 Promise
必然处于以下几种状态之一:
const promise = new Promise((resolve, reject) => {resolve(value) //该函数执行时会回调onFulfilled// reject(reason) //该函数执行时会回调onRejectedconsole.log("hello world") //该回调函数会被立即执行
})// 监听promise对象的状态 方式一
promise.then(onFulfilled).catch(onRejected)
// 监听promise对象的状态 方式二
promise.then(onFulfilled, onRejected)
使用Promise,将之前的代码进行重构:
// 1.设计函数
function fn(counter) {const promise = new Promise((resolve, reject) => {// 异步任务setTimeout(() => {if (counter > 0) {let sum = 0for (let i = 0; i < counter; i++) {sum += i}// 成功的回调resolve(sum)} else {// 失败的回调reject(`${counter}值错误`)}}, 2000)})return promise
}fn(59).then(value => {console.log("执行成功", value)
}).catch(err => {console.log("执行失败", err)
})
Promise.resolve
返回一个解析过的 Promise
对象举个栗子:
new Promise((resolve, reject) => {// resolve("执行成功")reject("执行失败")}).then(value => {console.log(value)}, reason => {console.log(reason)})
举个栗子:
执行如下代码:
const p1 = new Promise((resolve, reject) => {resolve("执行成功")// reject("执行失败")
})p1.then(res => {console.log("res:", res)
}).catch(err => {console.log("err:", err)
}).finally(() => {console.log("finally")
})
不论是成功还是失败,都会执行finally
new Promise((resolve, reject) => {console.log("executor")
})
new Promise((resolve, reject) => {resolve("normal resolve")}).then(res => {console.log("res", res)})
new Promise((resolve, reject) => {resolve(new Promise((resolve, reject) => {setTimeout(() => {resolve("第二个Promise的resolve")// reject("第二个Promise的reject")}, 2000);}))
}).then (res => {console.log("res:", res)
}).catch(err => {console.log("err:". err)
})
new Promise((resolve, reject) => {resolve({then: function (resolve, reject) {resolve("thenable value")}})
}).then(res => {console.log(res)
})
✨ 创作不易,希望各位大佬支持一下