加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

JS异步编程六种方案

发布时间:2019-01-22 08:00:15 所属栏目:建站 来源:浪里行舟
导读:媒介 我们知道Javascript说话的执行情形是单线程。也就是指一次只能完成一件使命。假若有多个使命,就必需列队,前面一个使命完成,再执行后头一个使命。 这种模式固然实现起来较量简朴,执行情形相对纯真,可是只要有一个使命耗时很长,后头的使命都必需

1.Promise的三种状态

  •  Pending----Promise工具实例建设时辰的初始状态
  •  Fulfilled----可以领略为乐成的状态
  •  Rejected----可以领略为失败的状态

JS异步编程六种方案

这个理睬一旦从守候状态酿成为其他状态就永久不能变动状态了,好比说一旦状态变为 resolved 后,就不能再次改变为Fulfilled

  1. let p = new Promise((resolve, reject) => {  
  2.   reject('reject')  
  3.   resolve('success')//无效代码不会执行  
  4. })  
  5. p.then(  
  6.   value => {  
  7.     console.log(value)  
  8.   },  
  9.   reason => {  
  10.     console.log(reason)//reject  
  11.   }  

当我们在结构 Promise 的时辰,结构函数内部的代码是当即执行的

  1. new Promise((resolve, reject) => {  
  2.   console.log('new Promise')  
  3.   resolve('success')  
  4. })  
  5. console.log('end')  
  6. // new Promise => end 

2.promise的链式挪用

  •  每次挪用返回的都是一个新的Promise实例(这就是then可用链式挪用的缘故起因)
  •  假如then中返回的是一个功效的话会把这个功效转达下一次then中的乐成回调
  •  假如then中呈现非常,会走下一个then的失败回调
  •  在 then中行使了return,那么 return 的值会被Promise.resolve() 包装(见例1,2)
  •  then中可以不转达参数,假如不转达会透到下一个then中(见例3)
  •  catch 会捕捉到没有捕捉的非常

接下来我们看几个例子:

  1. // 例1  
  2. Promise.resolve(1)  
  3. .then(res => {  
  4.   console.log(res)  
  5.   return 2 //包装成 Promise.resolve(2)  
  6. })  
  7. .catch(err => 3)  
  8. .then(res => console.log(res))  
  1. // 例2  
  2. Promise.resolve(1)  
  3.   .then(x => x + 1)  
  4.   .then(x => {  
  5.     throw new Error('My Error')  
  6.   })  
  7.   .catch(() => 1)  
  8.   .then(x => x + 1)  
  9.   .then(x => console.log(x)) //2  
  10.   .catch(console.error)  
  1. // 例3  
  2. let fs = require('fs')  
  3. function read(url) {  
  4.   return new Promise((resolve, reject) => {  
  5.     fs.readFile(url, 'utf8', (err, data) => {  
  6.       if (err) reject(err)  
  7.       resolve(data)  
  8.     })  
  9.   })  
  10. }  
  11. read('./name.txt')  
  12.   .then(function(data) {  
  13.     throw new Error() //then中呈现非常,会走下一个then的失败回调  
  14.   }) //因为下一个then没有失败回调,就会继承往下找,假如都没有,就会被catch捕捉到  
  15.   .then(function(data) {  
  16.     console.log('data')  
  17.   })  
  18.   .then()  
  19.   .then(null, function(err) {  
  20.     console.log('then', err)// then error  
  21.   })  
  22.   .catch(function(err) {  
  23.     console.log('error')  
  24.   }) 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读