promise是node.js的对象,它是一个构造函数,作用是将异步操作以同步操作的流程表达出来。解决Node.js异步编程中回调地狱的问题。
random()
random() 方法可返回介于 0(包含) ~ 1(不包含) 之间的一个随机数。
Math.ceil()向上取整函数。
抽奖小案列
<button class="btn">点击抽奖</button>
<script>
var btn = document.querySelector(".btn");
btn.addEventListener("click",function(){
setTimeout(()=>{
var num =Math.ceil(Math.random()*100);
// 0-1之间的随机数
if(num<=50)
{
console.log("恭喜中奖")
}else{
console.log("再接再厉")
}
console.log(num);
},1000)
})
</script>
因为点击抽奖后需要将信息返回给后台,等待后台决定是否中将,所以加了延时。
使用promise修改后
<button class="btn">点击抽奖</button>
<script>
var btn = document.querySelector(".btn");
btn.addEventListener("click",function(){
const p =new Promise((resolve,reject)=>{
setTimeout(() => {
var num =Math.ceil(Math.random()*100);
if(num>=40)
{
resolve(num)
}else{
reject(num);
}
}, 1000);
})
p.then((value)=>{
alert("中奖"+value)
},(value)=>{
alert("失败"+value)
});
})
</script>
buffer数据用toString()读取
封装读取文件函数(返回Primise对象)
primisify函数
它四util包下的一个函数,可以使用它将东西转换为promise.具体的我也没听懂。
p.catch(()=>{ })catch方法只能指定失败的回调函数。
let p1 = new Promise((resolve,reject)=>{
resolve("ok");
})
let p2= Promise.resolve("success")
let p3=Promise.resolve("Oh yean");
let result=Promise.all([p2,p1,p3])
//只有三个都是成功,result结果才能成功,失败一个就全部失败了。
promise对象状态改变后,对应的回调函数都会被执行,无论失败或成功,无论对应回调函数的多少。
promise支持链调用,可以解决回调地狱问题,指定回调函数更为灵活。
什么是回调地狱呢?
回调函数嵌套使用,外部回调函数异步执行的结果是嵌套的回调执行的条件,不便于阅读和异常处理。
可在ajax基础上加入promise
Promise封装fs读取文件