Promise、async+aweit

1.用来进行异步编程新的解决方案。用于处理异步操作,解决回调地狱的问题。

异步编程的几种形式:回调函数、发布订阅、promise、generator、async/awite

promise是一个对象,通过new实例化,传一个函数作为参数,函数里面传入resolve、reject也是两个函数,用于改变promise的状态。可以传入参数给两个函数。

		const p=new Promise((resolve,reject)=>{
			const xhr = new XMLHttpRequest()
			xhr.open("GET","https://api.apiopen.top/getJoke")
			xhr.send()
			xhr.onreadystatechange=function(){
				if(xhr.readyState===4){
					if(xhr.status>=200&&xhr.status<300){
						resolve(xhr.response)
					}else{
						reject(xhr.state)
					}
				}
			}
		})
		p.then((value)=>{
			textarea.value=value
		},(err)=>{
			alert(err)
		})

2.promisify()

Node8 提供了 util.promisify() 这个方法,方便我们快捷的把原来的异步回调方法改成返回 Promise 实例的方法.

只要符合 Node.js 的回调风格,所有函数都可以这样转换。也就是说,满足下面两个条件即可。

1)最后一个参数是函数

2)回调函数的参数为 (err, result),前面是可能的错误,后面是正常的结果

const util=require('util')
const fs=require('fs')
let myreadfile=util.promisify(fs.readFile)
myreadfile('静夜思.txt').then(value=>{
	console.log(value.toString())
}).catch(error=>{
	console.log("!!!",error)
})

promisify()内部返回一个new出来的promise对象

3.promise的两个主要属性

1)promiseState:共有三种状态 pending、resloved、rejected

2)promiseResult:promise的值,保存异步任务成功或失败的结果

4.promise的基本流程

 5.

 以上代码先打印111,后打印222

6.

  Promise.reslove()是一个定义在Promise上的函数,不属于实例对象,其返回值由其传入的参数决定。若传入非promise对象,则其返回值是成功的promise对象,这个对象的promiseState:fulfilled,对象的promiseResult:传入的参数。若传入promise对象,则其返回值由传入的参数的成功与否决定。

 --------------------------------------

Promise.rejected()总是返回一个失败的promise对象, promiseState永远都是rejected,对象的promiseResult为传入的参数(即使传入一个成功的promise对象)。

 传入一个成功的promise的返回结果

 -------------------------------------------------

 

 

 

 -------------------------------------------------

8.一共改变promise对象状态为成功和两种改为失败的方法

 9.为一个状态指定多种回调,那个变为这种状态时,多个回调都会执行。

 10.

 11.

 如果没有返回值,则返回undefined,再用.then()去接收,接收的是一个成功的promise,其promiseResult是undefined(因为任何非promise的参数都看作是成功的promise)

 12.异常穿透

一旦出现错误,就会进入catch,then()就不会执行了 

 13.

 14.async和aweit

 

 

 

async原理:

 async await 的原理_凌晨独舞的博客-CSDN博客_async await 原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值