1. Promise用法
js非同步呼叫較多,如果某個操作是基於上個非同步結果才能執行的,再有一個操作又是基於此操作的,則需要巢狀多層程式碼,在ES6中引入了Promise寫法,可以比較優雅的解決這個問題:
<script type="text/javascript"> function runAsync1(para) { var p = new Promise(function (resolve, reject) { //做一些非同步操作 setTimeout(function () { console.log('非同步任務1執行完成'); resolve(para + 1); }, 1000); }); return p; } function runAsync2(para) { var p = new Promise(function (resolve, reject) { //做一些非同步操作 setTimeout(function () { console.log('非同步任務2執行完成'); resolve(para + 2); }, 2000); }); return p; } function runAsync3(para) { var p = new Promise(function (resolve, reject) { //做一些非同步操作 setTimeout(function () { console.log('非同步任務3執行完成'); resolve(para + 3); }, 2000); }); return p; } runAsync1(1) .then(function (data1) { console.log(data1); return runAsync2(data1); }) .then(function (data2) { console.log(data2); return runAsync3(data2); }) .then(function (data3) { console.log(data3); }); </script>
輸出的結果是:
非同步任務1執行完成 2 非同步任務2執行完成 4 非同步任務3執行完成 7
只需要看最後幾行就可以,第一個then接收runAsync1的返回值data1可以將其傳遞給第二個操作,第二個then接收runAsync2的返回值data2將其當做引數傳遞給第三個操作。