promise函数详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了promise函数详解相关的知识,希望对你有一定的参考价值。

参考技术A 复制到你的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对象详解

Promise对象概述(什么是Promise)

 

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大

 

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理

 

有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易

 

 

 

Promise 对象的特点

对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和Rejected(已失败)只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是承诺,表示其他手段无法改变。

 

一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

 

 

Promise对象的缺点

 

无法取消Promise,一旦新建它就会立即执行,无法中途取消。

 

如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。

 

当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

 

如果某些事件不断地反复发生,一般来说,使用 Stream 模式是比部署Promise更好的选择。

 

以上是关于promise函数详解的主要内容,如果未能解决你的问题,请参考以下文章

Promise原理详解

promise用法详解

原生JS模拟Promise实现详解

AngularJS 中的Promise --- $q服务详解

ES6 Promise用法详解

详解如何构建Promise队列实现异步函数顺序执行