一.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