日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript中的回调地狱及解决方法

發布時間:2023/12/31 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript中的回调地狱及解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JavaScript中的回調地獄及解決方法

1、回調地獄

在使用JavaScript時,為了實現某些邏輯經常會寫出層層嵌套的回調函數,如果嵌套過多,會極大影響代碼可讀性和邏輯,這種情況也被成為回調地獄。比如說你要把一個函數 A 作為回調函數,但是該函數又接受一個函數 B 作為參數,甚至 B 還接受 C 作為參數使用,就這樣層層嵌套,人稱之為回調地獄,代碼閱讀性非常差。比如:

var sayhello = function (name, callback) {setTimeout(function () {console.log(name);callback();}, 1000); } sayhello("first", function () {sayhello("second", function () {sayhello("third", function () {console.log("end");});}); }); //輸出: first second third end

2、解決回調地獄

解決回調地獄有很多方法,比如:Promise 對象、Generator 函數、async 函數

3、Promise 對象解決回調地獄

采用鏈式的 then,可以指定一組按照次序調用的回調函數。這時,前一個 then 里的一個回調函數,返回的可能還是一個 Promise對象(即有異步操作),這時后一個回調函數,就會等待該 Promise對象的狀態發生變化,才會被調用。由此實現異步操作按照次序執行。

var sayhello = function (name) {return new Promise(function (resolve, reject) {setTimeout(function () {console.log(name);resolve();  //在異步操作執行完后執行 resolve() 函數}, 1000);}); } sayhello("first").then(function () {return sayhello("second");  //仍然返回一個 Promise 對象 }).then(function () {return sayhello("third"); }).then(function () {console.log('end'); }).catch(function (err) {console.log(err); }) //輸出:first second third end

上面代碼中,第一個 then 方法指定的回調函數,返回的是另一個Promise對象。這時,第二個then方法指定的回調函數,就會等待這個新的Promise對象狀態發生變化。如果變為resolved,就繼續執行第二個 then 里的回調函數

4、Generator 函數

// 用 co 模塊自動執行 var co = require('co'); var sayhello = function (name, ms) {setTimeout(function (name,ms) {console.log(name);}, ms); }var gen = function* () {yield sayhello("xiaomi", 2000);console.log('frist');yield sayhello("huawei", 1000);console.log('second');yield sayhello("apple", 500);console.log('end'); } co(gen());

本文參考https://www.cnblogs.com/wenxuehai/p/10455664.html#_label0

總結

以上是生活随笔為你收集整理的JavaScript中的回调地狱及解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。