
复制到你的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参数是自定义的
consolelog('resolve:'+data)
},(err)=>{
//err参数是自定义的
consolelog('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);
}
consolelog(a(1))
//这里输出的是undefined,因为执行a函数时,还没有执行return
//可以通过回调函数实现异步输出
function a(param,callback){
param =param+1
setTimeout(() => {
param =param+1
// return '异步 *** 作'+param
callback('异步 *** 作:'+param)
}, 1000);
}
consolelog(a(1,function(a){
consolelog(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参数是自定义的
consolelog('resolve:'+data)
},(err)=>{
//err参数是自定义的
consolelog('reject:'+data)
})
普通函数 简写 就是 箭头函数
当有多个接口需要顺序调用时
顺序调用是指 : 接口1返回的数据 ,作为请求接口2的参数 ,接口2返回的数据 ,又作为请求接口3的参数
promise基本用法
实例化时 new Promise(回调函数) ,传入的参数是一个回调函数
这个回调函数有两个参数分别是 resolve 和 reject
resolve 用来把 promise对象 变成 成功状态 ,并返回结果
reject 用来把 promise对象 变成 失败状态 ,并返回结果
promise实例 请求接口后,要么变为 成功状态 ,要么变为 失败状态
通常的用法是封装一个方法 request(url,params) 用来获取promise对象
传入 接口地址 和 参数 就能得到一个promise对象
需要在第一个then()设置的 回调内 return 一个 新的promise 对象
promisethen() 链式调用 的方式 相比于 普通 ajax()回调地狱 ,有了很大的改进
但是一连串的的 then()then()then() 看上去也不方便
改成 async 和 await 方式
await 必须出现在 async 声明的方法内部 ,不能单独出现
我是个干后端的 ,上边有不对的地方请标明
Promise是一种常用的异步解决方案,解决回调地狱的问题。
Promise可以解决两个问题:
Promise发送的请求会经历三个过程:padding(进行中)、fullfilled(成功)、rejected(失败)。当状态决定后就不会在改变,这个时候就会把状态改为resolved(已定型)
我通常配合vue和axios进行使用。
Promise有以下函数:
通常"Promiseresolve()then(f) "用这种方式把f变成符合promise的函数,但是如果f是同步函数这就会导致f只会在本段程序的末尾执行,有两种写法可以解决这个问题。
方法一:第一种写法是用async函数来写。
方法二:第二种写法是使用new Promise()。
ptry()就是解决以上的执行方式的痛点 Promisetry 为所有 *** 作提供了统一的处理机制,所以如果想用 then 方法管理流程,最好都用 Promisetry 包装一下。这样有 许多好处 ,其中一点就是可以更好地管理异常。
以上就是关于promise函数详解全部的内容,包括:promise函数详解、promise async/await、Promise的用法以及作用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)