SOURCE

console 命令行工具 X clear

                    
>
console
// async是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。
//因此对async函数可以直接then,返回值就是then方法传入的函数。
async function fun0(){
    console.log('fun0');
    return 'returnValue';
}
fun0().then(val=>{
    console.log(val) //fun0,returnValue
})

async function fun1(){
    console.log('fun1 Promise');
    return new Promise(function(resolve,reject){
        resolve('resolve Promise')
    })
}
fun1().then(val => {
    console.log(val); // fun1 Promise resolve Promise
})

console.log('----------------------------------------------');
/*await 也是一个修饰符,只能放在async定义的函数内。可以理解为等待。
await 修饰的如果是Promise对象:可以获取Promise中返回的内容(resolve或reject的参数),
且取到值后语句才会往下执行;
如果不是Promise对象:把这个非promise的东西当做await表达式的结果。
*/
async function fun(){
    let a = await 1;
    let b = await new Promise((resolve,reject)=>{
        setTimeout(function(){
            resolve('setTimeout')
        },3000)
    })
    let c = await function(){
        return 'function'
    }()
    console.log(a,b,c)
}
fun(); // 3秒后输出: 1 "setTimeout" "function"

console.log('----------------------------------------------');
function log(time){
    setTimeout(function(){
        console.log(time);
        return 1;
    },time)
}
async function fun3(){
    let a = await log(1000);//1秒后输出1000
    let b = await log(3000);//2秒后输出2000
    let c = log(2000);//3秒后输出3000
    console.log(a);//输出undefined
    console.log('log') //输出log
}
fun3(); 
// 立即输出 undefined log
// 1秒后输出 1000
// 2秒后输出 2000
// 3秒后输出 3000

 const str=async (a,b)=>{
     console.log('str+a='+a+' b='+b);
    return  'str';
    }
 console.log(str(1,2));


//await后面跟着的是定时器,不会等待定时器里面的代码执行完,
//而是直接执行后面的代码,然后再执行定时器中的代码。示例:结果为1 3 2
 const start = async () => {
    console.log(1)
    await setTimeout(() => {
        console.log(2)
    }, 1000);
    console.log(3);
};
start()

//async是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。
//因此对async函数可以直接then,返回值就是then方法传入的函数。