异步双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息,如开始位,同时在结束时有停止位。
解决异步的几种实现方式
如下代码
constrequest=function(){
letnum=Math.round(Math.random()*100)/100;
console.log(num);
setTimeout(function(){
if(num<0.5){
return('1234567');
}else{
return('abcdefg');
}
},500)
}
console.log(request())
//输出:0.31
//undefined
setTimeout为异步函数,所以第二个返回值就打印为了undefined,因为不会等待计时器函数执行完成再执行外层的console.log(request())。
1、promisethen
//解决方法一:promisethen
constrequest=function(){
var_this=this;
letnum=Math.round(Math.random()*100)/100;
console.log(num);
returnnewPromise((resolve,reject)=>{
setTimeout(function(){
num<0.5?resolve('1234567'):reject('abcdefg');
},500);
});
}
request().then(val=>{
console.log(val);
}).catch(err=>{
console.log(err);
});
2、回调函数
constrequest=function(cb){
letnum=Math.round(Math.random()*100)/100;
console.log(num);
setTimeout(function(){
num<0.5?cb('1234567'):cb('abcdefg');
},500)
}
varresult=request(function(res){
console.log(res);
})
3、asyncawait
constrequest=asyncfunction(){
letnum=Math.round(Math.random()*100)/100;
console.log(num);
constresult=awaitaa(num);
}
functionaa(num){
setTimeout(function(){
console.log(num<0.5?'1234567':'abcdefg');
},500)
}
request();
异步的另外一种含义是计算机多线程的异步处理。与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。