js-async

作者: 雨蒙_snow | 来源:发表于2020-02-01 19:28 被阅读0次

    1.then 只是将callback 给拆分了 本质还是异步
    2.async 和 await 是最直接的同步写法
    async函数返回一个promise对象,如果在async函数中返回一个直接量,async会通过Promise.resolve封装成Promise对象。
    我们可以通过调用promise对象的then方法,获取这个直接量。

    async function test(){
        return "Hello World";
    }
    
    var result=test();
    console.log(result);
    //打印Promise { 'Hello World' }
    

    那如过async函数不返回值,又会是怎么样呢?

    async function test(){
    
    }
    var result=test();
    console.log(result);
    //打印Promise { undefined }
    

    await会暂停当前async的执行,await会阻塞代码的执行,直到await后的表达式处理完成,代码才能继续往下执行。

    await后的表达式既可以是一个Promise对象,也可以是任何要等待的值。

    如果await等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。

    上边你看到阻塞一词,不要惊慌,async/await只是一种语法糖,代码执行与多个callback嵌套调用没有区别。

    本质并不是同步代码,它只是让你思考代码逻辑的时候能够以同步的思维去思考,避开回调地狱。

    简而言之-async/await是以同步的思维去写异步的代码,所以async/await并不会影响node的并发数,大家可以大胆的应用到项目中去!

    如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。

    举个例子,方便大家理解:

    function A() {
        return "Hello ";
    }
    
    async function B(){
        return "World";
    }
    
    async function C(){
        //等待一个字符串
        var s1=await A();
        //等待一个promise对象,await的返回值是promise对象resolve的值,也就是"World"
        var s2=await B();
        console.log(s1+s2);
    }
    
    C();
    //打印"Hello World"
    

    相关文章

      网友评论

          本文标题:js-async

          本文链接:https://www.haomeiwen.com/subject/qnbvoftx.html