国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript 異步調用

2024-05-06 15:46:19
字體:
來源:轉載
供稿:網友

JS中經常需要使用異步調用的情況,它可以回調數據,下面就讓錯新技術頻道小編帶大家一起來了解JavaScript 異步調用吧,希望對你學習這方面知識有所幫助。

問題

可修改下面的 aa() 函數,目的是在一抄后用 console.log() 輸出 want-value

function aa() {  setTimeout(function() {    return "want-value";  }, 1000);}

但是,有額外要求:

aa() 函數可以隨意修改,但是不能有 console.log()

執行 console.log() 語句里不能有 setTimeout 包裹

解答

也許這是個面試題,管它呢。問題的主要目的是考察對異步調用執行結果的處理,既然是異步調用,那么 不可能同步等待異步結果,結果一定是異步的

setTimeout() 經常用來模擬異步操作。最早,異步是通過回調來通知(調用)處理程序處理結果的

function aa(callback) {  setTimeout(function() {    if (typeof callback === "function") {      callback("want-value");    }  }, 1000);}aa(function(v) {  console.log(v);});

不過回調在用于稍大型一點的異步應用時,容易出現多層嵌套,所以之后提出了一些對其進行“扁平”化,這一部分可以參考閑談異步調用“扁平”化。當然 Promise 是非常流行的一種方法,并最終被 ES6 采納。用Promise 實現如下:

function aa() {  return new Promise(resolve => {    setTimeout(function() {      resolve("want-value");    }, 1000);  });}aa().then(v => console.log(v));

就這個例子來說,它和前面回調的例子大同小異。不過它會引出目前更推薦的一種方法——async/await,從 ES2017 開始支持:

function aa() {  return new Promise(resolve => {    setTimeout(function() {      resolve("want-value");    }, 1000);  });}async function main() {  const v = await aa();  console.log(v);}main();

aa() 的定義與 Promise 方法中的定義是一樣的,但是在調用的時候,使用了 await ,異步等待,等待到異步的結果之后,再使用 console.log() 對其進行處理。

這里需要注意的是 await 只能在 async 方法中使用,所以為了使用 await 必須定義一個 async 的 main 方法,并在全局作用域中調用。由于 main 方法是異步的(申明為 async),所以如果 main() 調用之后還有其它語句,比如 console.log("hello") ,那么這一句話會先執行。

async/await 語法讓異步調用寫起來像寫同步代碼,在編寫代碼的時候,可以避免邏輯跳躍,寫起來會更輕松。(參考: 從地獄到天堂,Node 回調向 async/await 轉變 )

當然,定義 main() 再調用 main() 這部分可以用 IIFE 封裝一下,

(async () => {  const v = await aa();  console.log(v);})();

關于JavaScript 異步調用,錯新技術頻道小編就為大家介紹到這里,希望js.VeVb.com可以幫助您全面了解更多的專業知識。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 满洲里市| 河曲县| 丰镇市| 嘉黎县| 阳山县| 德昌县| 岢岚县| 汪清县| 满洲里市| 霍林郭勒市| 台州市| 东乡县| 从化市| 宜春市| 监利县| 海盐县| 基隆市| 开江县| 方正县| 富顺县| 高淳县| 合山市| 山西省| 巨野县| 扎囊县| 洱源县| 山丹县| 绥芬河市| 登封市| 准格尔旗| 林州市| 靖宇县| 普兰店市| 夏邑县| 新晃| 高要市| 霸州市| 建瓯市| 建瓯市| 宁城县| 柏乡县|