Async/Await 原理分析

來源:互聯網
上載者:User

 一.Async, Await機制總結 async/await是寫非同步代碼的新方式,以前的方法有回呼函數和Promise。 async/await是基於Promise實現的,它不能用於普通的回呼函數。 async/await與Promise一樣,是非阻塞的。 async/await使得非同步代碼看起來像同步代碼,這正是它的魔力所在。  二.Async, Await機制和promise對比   1. async/await轉換工具安裝

   

    $ sudo npm install babel-plugin-async-to-promises -g    $ babel --plugins async-to-promises async_test.js

    2. async/await轉碼對比


function getConstant() {    return 1}async function getAsyncConstant() {    return 1}async function getPromise() {    return new Promise((resolved, rejected)=> {        resolved(1)    });}async function test() {    a = 2    c = 1    await getConstant();    d = 3    await getPromise();    d = 4    await getAsyncConstant();    return 2}
function getConstant() {    return 1;}function getAsyncConstant() {    return Promise.resolve().then(function () {        return 1;    });}function getPromise() {    return Promise.resolve().then(function () {        return new Promise((resolved, rejected) => {            resolved(1);        });    });}function test() {    return Promise.resolve().then(function () {        a = 2;        c = 1;        return getConstant();    }).then(function () {        d = 3;        return getPromise();    }).then(function () {        d = 4;        return getAsyncConstant();    }).then(function () {        return 2;    });}

從上可知, 所有帶async function 的都會主動產生Promise, await會主動產生then

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.