换个视角:探索JavaScript中同步与异步的绝佳之处!
同步、异步
异步(async),非阻塞setTimeout()、setInterval()、ajax、for循环
同步,阻塞
for循环和setTimeout案例
var i=0;for( var i=0;i<5;i ){
setTimeout(function(){
console.log(i);
},2000);
}
for循环是同步的,setTimeout()是异步的,最终输出5个5
如何输出0-4
方法一:将setimeout写成函数,传入一个参数k(等于i的值),再输出k
方法二:使用let定义变量,因为它有块级作用域
promise
一个promise可能有三种状态:等待(pending)、已完成(fulfilled)、已拒绝(rejected)async fn(onoff) {
return new Promise((resolve, reject) => {
if( onoff ){
resolve({ name:‘liu‘ }); // 成功return返回的值,对应then(res)中的res
}
else{
reject(‘‘); // 失败
}
});
},
//async:定义异步函数 awaiting:同步执行
Promise.all()、Promise.race()
Promise.race()意为赛跑的意思,也就是数组中的任务哪个获取的块,就返回哪个,不管结果本身是成功还是失败。一般用于和定时器绑定,比如将一个请求和三秒的定时器包装成Promise实例,加入到Promise队列中,请求三秒中还没有回应时,给用户一些提示或相应的操作。
Promise.all()可以将多个实例组装个成一个新实例,
成功的时候返回一个成功的数组;失败的时候则返回最先被reject失败状态的值。
适用场景:比如当一个页面需要在很多个模块的数据都返回回来时才正常显示,否则loading。
promise.all中的子任务是并发执行的,适用于前后没有依赖关系的。
版权声明:他人将便捷数据网提供的内容与服务用于商业、盈利、广告性目的时,需得注明出处,转载时请附上原文出处链接及本声明。
原文链接:https://www.bian-jie.cn/search/promotion_article/1/19231139.html