promise函数详解

promise函数详解,第1张

复制到你的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的用法以及作用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9436952.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存