# Promise使用
# Promise优点:解决回调地狱的问题,链式书写,方便阅读和维护
# 语法:
# 结构:new Promise((resolve,rejected)=>{ ...异步函数... })
# resolve(data) //成功的回调
# rejected(e) == throw err //失败的回调
# promise对象的数据获取
# 方式1: .then( data =>{ ... },err => { ... } )
# 方式2: .then( data => { ... }).catch( e=>{ ... } )
const dns = require('dns')
function main(ip){
let p =new Promise((resolve,rejected)=>{
dns.resolve(ip,(err,records)=>{
if(err) {
rejected(err)
}else{
resolve(records)
}
})
})
return p;
}
main('www.qq.com').then(data=>{
console.log(data)
}).catch(e=>{
console.log(e);
})
# 使用util.promisify
# util.promisify(异步函数) // 直接将异步函数封装为Promise的对象
const util = require('util')
const request = require('request')
let get = util.promisify(request.get)
get('http://www.baidu.com').then(data=>{
console.log(data.headers);
})
# async/await的使用
# 关键点
# 1. await 后面是promise对象,则获取到的就是成功的值
# 2. await 后面是普通对象,则获取到的就是普通对象的值
# 3.await 后面的是reject或者throw异常的,则需要通过catch来获取
const util = require('util')
const request = require('request')
let get = util.promisify(request.get)
async function doGet(){
var data = await get('http://www.baidu.com')
console.log(data.headers)
console.log(data.body)
console.log(data.statusCode)
}
doGet()
← 代理功能 sync-request →