Promise 相对与纯回调函数的优势
- 制定调用函数的方式更灵活
- 纯函数必须在启动异步任务前制定回调函数
- promise 绑定回调函数就很灵活, 启动异步任务前 / 甚至可以在异步函数之后绑定回调函数也是可以拿到返回数据
- 支持链式调用, 可以解决回调地狱问题
纯回调函数
// 启动异步操作, 必须连带 成功回调和失败回调一起传入
createAudioFile (config,successCallback, failureCallback)
Promise 甚至可以在异步结束后再去拿结果都可以
const p = new Promise((resolve, reject) => { // 执行器函数
// 这里会执行异步操作
setTimeout(() => {
const time = Date.now() // 如果时间等于基数表示失败,偶数表示成功
// 如果成功了, 调用resolve(v)
if (time %2 === 0) {
resolve('成功数据' + time) // 括号中可以传任何数据(字符串、数组、对象,甚至是错误)
}else { // 如果失败了, 调用reject(r)
reject('失败数据' + time) // 括号中可以传任何数据(字符串、数组、对象,甚至是错误)
}
},1000)
})
// Promise 发起异步一秒就结束了, 但是我们这里在结束后2秒再去拿结果也是可以拿到的
setTimeout({
p.then(
onResolved => {
console.log(onResolved)
},
onRejected=>{
console.log(onRejected)
}
)
},3000)