一、async
async是一種關鍵字,用於指示函數是異步的。在異步函數中,JavaScript不會被阻塞,可以在等待操作完成的同時繼續執行其他代碼。
舉個例子,下面這個函數使用setTimeout模擬了一個異步操作並返回結果:
async function example() {
return new Promise(resolve => {
setTimeout(() => {
resolve("Hello, World!");
}, 1000);
});
}
這個函數返回一個Promise對象,Promise最終會被解決(resolve)為字符串 “Hello, World!”,但是在這個函數中,我們不需要等待1秒鐘才能獲得結果。
我們可以使用async/await語法糖輕鬆地獲取異步函數返回的結果,而不需要嵌套使用.then或.catch鏈。
二、asynchronous
asynchronous與async類似,但是它是一個修飾符,用於修飾函數或方法,標記它是異步的。使用asynchronous修飾符,可以讓你的代碼更加易讀清晰明了。
這裡沒有什麼需要說明的例子,下面這段代碼展示了如何使用asynchronous修飾符修飾函數:
asynchronous function example() {
return new Promise(resolve => {
setTimeout(() => {
resolve("Hello, World!");
}, 1000);
});
}
三、async音標
async音標 /ə’sɪŋkrənəs/,源自英文單詞asynchronous的發音。
四、async await
async/await是ES6/ES2017中引入的語法糖,它簡化了異步代碼的書寫。使用async/await,可以在不需要嵌套使用.then或.catch鏈的情況下,直接獲取異步函數返回的結果。
下面的代碼是上面例子的異步版本,使用async/await直接從example函數中獲取返回值。
async function main() {
const result = await example();
console.log(result); // 打印出 "Hello, World!"
}
五、promise區別
與使用async/await直接獲取異步函數返回值相比,使用Promise可能更加繁瑣。在這裡,我們簡單介紹一下使用Promise手動處理異步函數的流程。
首先,我們需要使用new Promise()創建一個Promise對象,並將異步操作包裹在其中。在異步操作完成時,我們調用resolve()方法將結果封裝在Promise對象中。
下面的例子展示了如何使用Promise實現異步代碼:
function example() {
return new Promise(resolve => {
setTimeout(() => {
resolve("Hello, World!");
}, 1000);
});
}
function main() {
example().then(result => {
console.log(result); // 打印出 "Hello, World!"
});
}
六、python async
Python也有內置異步支持,你可以使用asyncio模塊在Python代碼中編寫異步函數。
下面這個例子展示了一個簡單的Python異步函數:
import asyncio
async def example():
await asyncio.sleep(1)
return "Hello, World!"
async def main():
result = await example()
print(result) # 打印出 "Hello, World!"
asyncio.run(main())
七、enableasync代碼
enableasync是一個開源的JavaScript庫,它提供了一些工具,幫助你在應用中實現異步模式。
下面這個例子展示了如何在一個Node.js應用中使用enableasync:
const enableasync = require("enableasync");
const EXAMPLE_MS = 1000;
const exampleFunction = enableasync(function(cb) {
setTimeout(function() {
cb(null, "Hello, World!");
}, EXAMPLE_MS);
});
exampleFunction(function(err, result) {
if (err) {
console.error(err);
} else {
console.log(result); // 打印出 "Hello, World!"
}
});
上面的代碼中,我們使用了enableasync包裝了一個異步函數exampleFunction,需要注意的是,使用enableasync包裝時需要將異步回調處理函數作為唯一參數傳入。
在exampleFunction完成時,使用cb回調函數傳遞異步結果,並且將其作為第二個參數傳入。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/182433.html
微信掃一掃
支付寶掃一掃