什么是promise异常穿透(什么是promise?如何使用)

Promise 英文译为:许诺,允诺,希望。

理解了 Promise 这个词的意思,对学习 Promise 语法很有帮助。

Promise 是异步编程的一种解决方案,ES6 将它写进了语言标准,统一了用法。

Promise 的特点

对象的状态是不受外界影响的。Promise 是无法取消的,一旦建立就会执行。它有三种状态:pending(进行中),fulfilled(已成功),rejected(已失败)。

Promise 对象的状态改变,只有两种可能:从 pending 变为 fulfilled 和 从 pending 变为 rejected 。只有结果才会决定当前属于哪一状态,任何操作都无法改变状态。只要状态发生,就不会再变了。

Promise 的基本用法

let onePromise = new Promise(function(resolve,reject){    //resolve(...) 用来完成这个 Promise    //reject(...) 用来拒绝这个 Promise})

?Promise 链式调用(示例很简单)

function delay(time){    return new Promise(function(resolve,reject){        setTimeout(resolve,time)    })}
delay(100).then(function goNext1Fn(){ console.log(\\\"go1...\\\") return delay(200);}).then(function goNext2Fn(){ console.log(\\\"go2...\\\");})

?调用 delay(100),创建一个将在 100ms 后完成的 Promise,然后继续扩展下一个 then 的回调。

第 1 个 then 就是链式调用的第一步,第 2 个 then 就是链式调用的第 2 步,可以一直任意的扩展下去。如果前一个 then 引入了一个回调,那下一个 then 会等待执行完成后,继续调用。

Promise 并行

如果我们想同时执行两个或者是执行三个并行执行,要怎样实现呢?Promise 提供了 Promise.all() 方法,可以协调多个并发。

const p = Promise.all([p1, p2, p3]);

p的状态由p1、p2、p3决定,分成两种情况。

(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

Promise 竞态

如果项目同时请求三个接口,而只以第一个接口返回的数据为你使用,抛弃其他数据。这种情况 Promise 也考虑到了,提供了 Promise.race() 方法,在传统模式上叫门闩,在 promise 中称为竞态。

使用注意事项

Promise 必须和 new 一起使用,并且必须提供一个函数回调,这个回调是同步或者是立即调用的函数,接受两个函数回调用于 promise 的决议(resolve),通常我们把这两个函数称为 resolve 和 reject 。

Promise 传空数组

如果 Promise.all 传入一个空数组,它会立即完成,如果 Promise.race 传入一个空数组会一直挂着,永远都不会往下执行。


参考资料:

《你不知道的 Javascript 中 》

http://es6.ruanyifeng.com/#docs/promise

原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34484.html

(0)
小道研究's avatar小道研究
上一篇 2024年4月9日 上午9:22
下一篇 2024年4月9日 上午9:24

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注