什么是承诺

  介绍

这篇文章给大家分享的是有关什么是承诺的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

承诺是什么

官网解释承诺表示一个异步操作的最终结果。

翻译,==可以将承诺理解为一个状态机==,它存在三种不同的状态,并在某一时刻只能有一种状态

等待表示还在执行解决执行成功拒绝执行失败

一个承诺是对一个异步操作的封装,异步操作有等待完成,成功和失败三种可能的结果,对应了承诺的三种状态。

承诺的状态只能有等待转换位解决或者等待转换为拒绝,一旦状态转化完成就无法再改变。

假设我们用承诺封了一个异步操作,那么当它被创建的时候就处于等待状态,当异步操作成功完成时,
我们将状态转换为解决,如果执行中出现错误,将状态转换为拒绝。

var=承诺新的承诺(函数(解决,拒绝){//代码   如果(){/*异步操作成功*/解决(值)   其他}{   拒绝(错误)   }   })

使用然后方法获取结果

var fs=要求(& # 39;fs # 39;)   函数readFile_promise(路径){   返回新的承诺(函数(解决,拒绝){   fs。readFile(路径,& # 39;utf - 8 # 39;,函数(呃,数据){   如果(数据){   解决(数据)   其他}{   拒绝(err)   }   })   })   }      结果var=readFile_promise (& # 39;。/1. txt # 39;)   result.then(功能(价值){//成功   console.log(& # 39;成功# 39;,值)   (错误){},函数//失败   console.log(& # 39;失败# 39;,错误)   })//将一个异步函数封装成承诺,只要在回调函数中针对不同的返回结果调用解决或者拒绝方法。//解析函数会在异步操作成功完成时被调用,并将异步操作的返回值作为参数传递到外部。//拒绝是在异步操作出现异常时被调用,会将错误信息作为参数传递出去。

然后方法的返回值

然后方法总是返回一个新的承诺对象,多次调用然后方法,默认返回一个一个空的承诺对象
使用回报来来返回。

var=readFile_promise承诺(& # 39;。/foo.txt& # 39;)   promise.then(功能(价值){//成功   console.log(& # 39;成功# 39;,值)//foo   返回readFile_promise (& # 39;。/bar.txt& # 39;)   (错误){},函数//失败   console.log(& # 39;失败# 39;,错误)   })(功能(价值){   console.log(& # 39;然后# 39;,值)//酒吧   }) <编辑>承诺的执行
    <李>虽然我们是通过然后方法来获取承诺的结果,但是承诺是当那方法调用之后才执行吗?
var=new承诺承诺((解决,拒绝)=祝辞{   console.log(& # 39;开始# 39;)   解决()   })      setTimeout(()=祝辞{   promise.then(()=祝辞{   console.log(& # 39;结束# 39;)   })   }, 5000)//开始开始5 s后结束//运行顺序是,当承诺从被创建的那一刻起就开始执行了,然后方法只是提供了访问承诺状态的接口,与承诺的执行无关。 <编辑>承诺常用的api
    <李> <李>解决拒绝了李 <李> <李>所有种族的方法接收一个承诺数组作为参数并返回一个新的承诺,数组中的承诺会同时开始执行,种族返回的承诺的状态有数组中率先执行完毕的承诺的状态决定 <李>抓住执行出错可以使用扔关键字抛出错误,并使用抓方法进行捕获李
//如果有多个承诺需要执行,可以使用promise.all ()//方法统一声明,改方法可以将多个承诺对象包装成一个承诺//该方法接收一个数组作为参数,数据的元素如果不是承诺对象,则回先调用解决方法转换。//如果中间有一个承诺状态是拒绝,那么转换后的承诺也会变成拒绝,并且将错误信息传给抓方法   var承诺=[& # 39;foo.txt& # 39; & # 39; bar.txt& # 39;, & # 39; baz.txt& # 39;】   promises.map(函数(路径){//console.log(路径)   返回readFile_promise(路径)   })      Promise.all(承诺),然后(函数(结果){   console.log(结果)//[& # 39;foo.txt& # 39; & # 39; bar.txt& # 39;, & # 39; baz.txt& # 39;]顺序排列的   }).catch(函数(err) {//}) <编辑>使用承诺组织异步代码 //例子,有三个文本文件需要顺序读取   var列表=[& # 39;foo.txt& # 39; & # 39; bar.txt& # 39;, & # 39; baz.txt& # 39;】   var计算=0;   readFile_promise (& # 39; foo.txt& # 39;),然后(readCB) (readCB) (readCB);      函数readCB(数据){   巴兹console.log(数据)//foo酒吧   如果(+ + count> 2) {   返回   }   返回readFile_promise(列表[数])   }

什么是承诺