手机版

深入分析ES6中的承诺

时间:2021-08-28 来源:互联网 编辑:宝哥软件园 浏览:

ES6中的promise对象听了很久,据说解决了我们用回调生成回调地狱的问题。既然今天下午有这样的学习欲望,那就来看看吧。当然,我参考的是阮一峰的教程。

第一部分:什么是承诺

看看本文的最后一个例子,很快就能理解。

Promise是ES6中内置的一个对象(其实是一个构造函数,通过它我们可以创建Promise对象),就是为了解决异步问题。诺言在英语中是诺言的意思。

承诺具有以下特征:

承诺有三种状态:待定、已解决和已拒绝。只有异步操作的结果才能决定当前的状态,其他任何操作都无法改变这个状态。这就是承诺。

承诺有三种状态,但它们如何改变?一:从待定到已解决。第二:从待定到拒绝。而只有这两种形式的转化,连Promise对象的结果都无能为力。

然而,Promise也有一些缺点。比如打卡时不能取消状态。此外,我们无法判断丁鹏是刚刚起步还是即将完成。

第二部分:使用承诺

前言:

在以下示例的解释中,我们需要使用setTimeout函数。在这里,我们首先解释setTimeout的一些重要用途。一般来说,我们通常使用以下内容:

setTimeout(func(){},1000);

也就是说,func函数在1000毫秒后执行,但实际上setTimeout可以传入更多的参数。这个博客已经解释过了,但是为了理解下面的例子,我们只需要知道第三和第四个参数可以在chrome中传递.作为func()函数的参数,例如:

setTimeout(函数(a,b) { console.log(a,b));}, 1000, 20, 50);最终的输入结果是70

以下代码创建了一个Promise实例:

Var promise=新承诺(函数(解析,拒绝){//.一些代码如果(/*异步操作成功*/){ resolve(value);} else { reject(错误);}});其中,由于Promise是一个构造函数,所以我们可以使用new来创建一个对象。值得注意的是,函数(resolve,reject){}必须写,否则不是Promise。

该函数用于初始化Promise对象,其中该函数接受两个函数作为参数。如果我们在函数体中执行解析函数,Promise的状态将从待定更改为已解析(或完全填充,两者相同)。同样,如果我们执行拒绝功能,待定将被拒绝。

注意:这个例子的if语句不是必需的。我们在这里要表达的是,如果得到异步成功的相关结果,我们会调用resolve,将pending转换为resolved,并在异步成功后传递value值供以后使用。据说是为了以后使用,因为Promise还有一个then()方法,可以定义异步成功(或失败)后需要做什么。这就是为什么存在解决和拒绝内置功能。

创建这个Promise对象后,会有一个结果,但成败仍不确定。我们需要根据判断结果的成败做不同的事情,所以我们使用then()方法,如下所示:

promise . then(function(value){//success },function(error){//failure });下面是一个例子,并给出了详细的解释:

!DOCTYPE html html lang=' en ' head meta charset=' UTF-8 ' title testsettimeout/title/head body script var Promise=new Promise(函数(解析,拒绝){ console . log(' good ');var a=10var b=a25;如果(b===35) {//一旦异步执行成功,我们将调用内置的解析函数,将挂起状态转换为已解析,并传入我们要发出的执行。

版权声明:深入分析ES6中的承诺是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。