js种的同步、异步

同步、异步

同步,阻塞

异步(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

async fn(onoff) {
    return new Promise((resolve, reject) => {
        if(  onoff  ){
            resolve({  name:‘liu‘  });   // 成功return返回的值,对应then(res)中的res
        }
        else{
            reject(‘‘);  // 失败
        }
    });
},
//async:定义异步函数      awaiting:同步执行

一个promise可能有三种状态:等待(pending)、已完成(fulfilled)、已拒绝(rejected)

Promise.all()、Promise.race()

Promise.all()可以将多个实例组装个成一个新实例,
    成功的时候返回一个成功的数组;失败的时候则返回最先被reject失败状态的值。
    适用场景:比如当一个页面需要在很多个模块的数据都返回回来时才正常显示,否则loading。
    promise.all中的子任务是并发执行的,适用于前后没有依赖关系的。

Promise.race()意为赛跑的意思,也就是数组中的任务哪个获取的块,就返回哪个,不管结果本身是成功还是失败。
    一般用于和定时器绑定,比如将一个请求和三秒的定时器包装成Promise实例,加入到Promise队列中,请求三秒中还没有回应时,给用户一些提示或相应的操作。

版权声明:他人将便捷数据网提供的内容与服务用于商业、盈利、广告性目的时,需得注明出处,转载时请附上原文出处链接及本声明。

原文链接:https://www.bian-jie.cn/search/promotion_article/1/19240112.html

点击加入QQ交流群:{{qqQNum}}