<font id="zqva1"></font>
<rt id="zqva1"></rt>
  • <tt id="zqva1"></tt>
    <cite id="zqva1"></cite>

    <cite id="zqva1"><noscript id="zqva1"></noscript></cite>
      <rp id="zqva1"><meter id="zqva1"></meter></rp>

        <cite id="zqva1"></cite>
          <b id="zqva1"></b>
          <rp id="zqva1"></rp>
          <cite id="zqva1"></cite>

          <rt id="zqva1"></rt>

        1. <rp id="zqva1"></rp>

          JavaScript 異步調用——從小小題目逐步走進 JavaScript 異步調用

          時間:?2017-10-27閱讀:?802標簽:?js技巧作者:?邊城

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

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

          但是,有額外要求:

          1.  aa()函數可以隨意修改,但是不能有console.log()
          2. 執行  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);
          })();
          站長推薦

          1.阿里云: 本站目前使用的是阿里云主機,安全/可靠/穩定。點擊領取2000元代金券、了解最新阿里云產品的各種優惠活動點擊進入

          2.騰訊云: 提供云服務器、云數據庫、云存儲、視頻與CDN、域名等服務。騰訊云各類產品的最新活動,優惠券領取點擊進入

          3.廣告聯盟: 整理了目前主流的廣告聯盟平臺,如果你有流量,可以作為參考選擇適合你的平臺點擊進入

          鏈接: http://www.modern-decoration.com.cn/article/detial/19

          三個實用的javascript小技巧

          如果你想從后向前獲取一個數組的元素,可以這樣寫:如果你想在某個條件邏輯值為true時,執行某個函數,就像這樣:如果你必須給一個變量賦默認值,可以簡單的這樣寫:

          JS技巧技法總結

          閉包原理、數組展平、前端語音(在項目中需要對ajax請求返回的消息進行語音播報,str 為返回的data)、Proxy 數據綁定和監聽、計數器

          JS禁止打開控制臺

          主要為了通過禁止打開控制臺,防止別人進行代碼調試。禁止右鍵查看源碼和F12;通過頁面寬度變化監測控制臺;利用控制臺特性改寫對象toString;利用控制臺特性進行監聽dom屬性

          javascript如何判斷值是否為整數?

          javascript如何判斷一個值是否為整數?下面本篇文章就來給大家介紹一下使用javascript判斷一個值是否為整數的方法。

          (a ==1 && a== 2 && a==3) 有可能是 true 嗎?

          1. 利用松散相等運算符 == 的原理,自定義 toString 和 valueOf 返回對應值2. 利用半寬度韓文等特殊字符,玩“障眼法”,本質上其實并沒有做到題設3. 劫持 JS 對象的 getter,不過這種方式對于嚴格相等 === 同樣有效

          js中~~和 | 的妙用

          ~~它代表雙非按位取反運算符,如果你想使用比Math.floor()更快的方法,那就是它了。需要注意,對于正數,它向下取整;對于負數,向上取整;非數字取值為0,它具體的表現形式為:

          js技巧_js中一些常見的陷阱

          這里我們針對JavaScript初學者給出一些技巧和列出一些陷阱。如果你已經是一個磚家,也可以讀一讀。你是否嘗試過對數組元素進行排序?

          5個小技巧讓你寫出更好的 JavaScript 條件語句

          使用 Array.includes 來處理多重條件,少寫嵌套,盡早返回,使用函數默認參數和解構,相較于 switch,Map / Object 也許是更好的選擇,使用 Array.every 和 Array.some 來處理全部/部分滿足條件,讓我們一起寫出可讀性更高的代碼吧

          js語言中常見錯誤總匯

          事實證明很多這些 null 或 undefined 的錯誤是普遍存在的。 一個類似于 Typescript 這樣的好的靜態類型檢查系統,當設置為嚴格的編譯選項時,能夠幫助開發者避免這些錯誤。

          js求數組的最大值--奇技淫巧和笨方法

          js中有很多“奇技淫巧”,有時我會常常刻意去用這些“奇技淫巧”(注意,我不是在反對用它,只是有時其實沒必要用)。比如,求數組中的最大值,js中Array沒有原生的求最大值的方法,但是Math有呀

          內容以共享、參考、研究為目的,不存在任何商業目的。其版權屬原作者所有,如有侵權或違規,請與小編聯系!情況屬實本人將予以刪除!

          文章投稿關于web前端網站點搜索站長推薦網站地圖站長QQ:522607023

          小程序專欄: 土味情話心理測試腦筋急轉彎幽默笑話段子句子語錄成語大全運營推廣

          国产精品高清视频免费 - 视频 - 在线观看 - 影视资讯 - 唯爱网