promise函数详解

复制到你的vscode上看
//promise最核心的思想:用同步的流程解决异步的操作

//Promise 构造函数接受一个函数作为参数,该函数的两个参数分别是 resolve 方法和 reject 方法。
let promise =new Promise((reject,resolve)=>{

})

//如果异步操作成功,则用 resolve 方法将 Promise 对象的状态,从 pending 变为 resolved,并且向外传递执行成功后的数据;

//如果异步操作失败,则用 reject 方法将 Promise 对象的状态,从 pending 变为 rejected,并且向外传递执行失败后的数据
//promise的then方法可以接收resolve和reject传过来的数据 ;then方法有两个是回调函数的参数,分别对应resolve和reject
return new Promise((reject,resolve)=>{

}).then((data)=>{
//data参数是自定义的
console.log('resolve:'+data)
},(err)=>{
//err参数是自定义的
console.log('reject:'+data)
})
//每个 Promise 都会提供一个 then() 函数,和一个 catch(),实际上是 then(null, ...) 函数
// 我们可以在then()中做三件事,
// 1. return 另一个 promise
// 2. return 一个同步的值 (或者 undefined)
// 3. throw 一个同步异常 throw new Eror('');

// 为什么要有Promise函数?
function a(param){
setTimeout(() => {
return '异步操作'+param
}, 1000);
}
console.log(a(1))
//这里输出的是undefined,因为执行a函数时,还没有执行return

//可以通过回调函数实现异步输出
function a(param,callback){
param =param+1
setTimeout(() => {
param =param+1
// return '异步操作'+param
callback('异步操作:'+param)
}, 1000);
}
console.log(a(1,function(a){
console.log(a+' 211')
}))
//这里function(a){...}实际上是在settimeout中执行的。所以settimeout那个延迟了的一秒不能影响他
//虽然回调函数可以解决这个问题,假设我们需要在异步操作1执行后,执行异步操作2;异步操作2执行后执行异步操作3,这样层层嵌套
//那么就会陷入回调地狱,所以我们使用Promise函数解决异步执行问题。

return new Promise((reject,resolve)=>{
setTimeout(() => {
resolve({a:1,b:2,c:'这是异步操作成功resovle返回的数据'})
reject('异步操作失败1')
}, 1000);
}).then((data)=>{
//data参数是自定义的
console.log('resolve:'+data)
},(err)=>{
//err参数是自定义的
console.log('reject:'+data)
})

你可能感兴趣的:(promise函数详解)