promise和async/await

js的同步和异步问题通常是指ajax的回调,如果是同步调用,程序在发出ajax调用后就会暂停,直到远程服务器产生回应后才会继续运行。而如果是异步调用,程序发出ajax调用后不会暂停,而是立即执行后面的代码,服务器返回信息后会自动触发回调函数进行处理。相比较而言,异步调用的性能最佳,程序不会出现卡顿的现象,而同步调用则通常用于需要立即获得结果并实时处理的情况。

promise和async/await都是js异步转同步的方法,解决嵌套回调的问题

promise

promise共有三个状态:

pending(执行中)、success(成功)、rejected(失败)

基本语法:

resolve处理成功情况,用.then接收成功结果

 let p = new Promise((resolve,reject) => {
       resolve('success')
 });
 p.then(result => {
       console.log(result); // success
 });

rejected处理失败情况,用catch接收失败结果

let p = new Promise((resolve,reject) => { 
    reject('error'); 
 }); 
p.catch(result => { 
    console.log(result); 
})`

async / await

相对于promise来讲,写法更加优雅简洁,其是寄生于Promise的

基本语法:

async和await是配对使用的,await存在于async的内部。否则会报错
await表示在这里等待一个promise返回,再往后执行
await会拿到resolve结果,是then函数的语法糖

async function demo() {
    let result01 = await sleep(100);
    //上一个await执行之后才会执行下一句
    let result02 = await sleep(result01 + 100);
    let result03 = await sleep(result02 + 100);
    // console.log(result03);
    return result03;
 }

如果是reject状态,可以用try-catch捕捉

let p = new Promise((resolve,reject) => { 
    setTimeout(() => { 
        reject('error'); 
    },1000); 
});

async function demo(params) { 
    try { 
        let result = await p; 
    }catch(e) { 
        console.log(e); 
    }
}
demo();

转自「Z姑娘早安」的原创文章
原文链接:https://blog.csdn.net/qq_37617413/java/article/details/90637694

你可能感兴趣的:(promise和async/await)