欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中的異步能省掉await嗎?

 更新時(shí)間:2021年12月23日 11:23:32   作者:grofis  
這篇文章主要介紹了JavaScript中的異步能省掉await嗎?一直以來,困擾我的一個(gè)問題是JavaScript中,能否實(shí)現(xiàn)不帶await的異步。今天我終于把這個(gè)問題想通了然后分享給大家,希望對大家的學(xué)習(xí)過程有所幫助

之前我知道要在JavaScript中同步獲取異步執(zhí)行的結(jié)果,必須帶await;在for循環(huán)中,如果不用Promise.All的話,異步不起效果。但是每次需要等待執(zhí)行結(jié)果的時(shí)候,都需要帶asyncawait,我覺得老麻煩了,也不好看。如果記住了這兩個(gè)單詞的寫法倒還好,沒記住的話每次拼錯(cuò),能把思路打斷,忽然冒出這樣的單詞,也不美觀。

于是我就一致致力于解決這個(gè)問題,作為一個(gè)經(jīng)常以造輪子為自豪的程序員,我認(rèn)為我有責(zé)任為JavaScript的改變做出一點(diǎn)小小的貢獻(xiàn)。

請看下面這段代碼:

const trans = require('node-google-translate-skidz');

function translate (str, strEn, tarEn) {
  let p = () => {
    return new Promise((resolve, reject) => {
      trans({
        text: str,
        source: strEn ? strEn : 'zh',
        target: tarEn ? tarEn : 'en'
      }, function (result) {
        resolve(result.translation)
      });
    })
  }
  let an = async () => {
    let b = await p()
    console.log(b);
  }
  return an()
  //console.log(b)
}


let c = translate('中文')
console.log('c', c)

這段代碼可能是我能想出最好的,解決異步問題的方案了,答案依然沒有成功。但我終于知道為什么JavaScript中,不管你如何包裹,用什么技術(shù)都無法真正避免asyncawait了。

看translate方法調(diào)用的地方,調(diào)用完之后打印翻譯的結(jié)果。這么做的目的,我當(dāng)然是希望有結(jié)果之后打印了,如果打印的是Promise { <pending> },那說明沒有等待就直接執(zhí)行了。

為了達(dá)到有結(jié)果之后再打印的目的,我在translate方法中自作聰明地封裝了一道async()=>{await}, 然后讓translate返回await執(zhí)行的結(jié)果。但是這個(gè)方法不會(huì)起到任何作用,因?yàn)樽詈蟠蛴〉慕Y(jié)果仍然是我想要竭盡全力避免的

為什么呢?因?yàn)槲腋阃?code>async只對function起作用,也就是說async是有作用域的。在我執(zhí)行了let c = translate('中文')這個(gè)方法之后,因?yàn)槲覜]有告訴編譯器translate需要await(我自以為translate內(nèi)部已經(jīng)實(shí)現(xiàn)了asyncawait,那么translate就會(huì)自動(dòng)等待執(zhí)行結(jié)果返回。但是因?yàn)橛凶饔糜虻拇嬖?,translate內(nèi)部的作用域是無法影響到translate方法執(zhí)行的這一層面上的。),所以編譯器還是直接執(zhí)行了console.log('c', c) ,也就是打印了Promise { <pending> }。

通過引入作用域這個(gè)概念,方法體的async、await無法使方法調(diào)用這個(gè)層級也async、await,你大概就能理解JavaScript中,為什么異步無法省略await了。

到此這篇關(guān)于JavaScript中的異步能省掉await嗎?的文章就介紹到這了,更多相關(guān)JavaScript中的異步內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js實(shí)現(xiàn)隨機(jī)點(diǎn)名功能

    js實(shí)現(xiàn)隨機(jī)點(diǎn)名功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)隨機(jī)點(diǎn)名功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 淺析js中的every()對空數(shù)組總返回true

    淺析js中的every()對空數(shù)組總返回true

    JavaScript?語言的核心部分足夠大,以至于我們很容易誤解其某些部分的工作方式,本文就來和大家一起討論下為什么JS中的?every()對空數(shù)組總返回?true,需要的可以參考下
    2023-09-09
  • JavaScript?中創(chuàng)建私有成員

    JavaScript?中創(chuàng)建私有成員

    這篇文章主要介紹了JavaScript?中創(chuàng)建私有成員,下面介紹以?#?作為前綴幾種在?JavaScript?代碼中實(shí)現(xiàn)私有屬性和方法的方式,需要的小伙伴可以參考一下
    2021-12-12
  • 詳解關(guān)于微信setData回調(diào)函數(shù)中的坑

    詳解關(guān)于微信setData回調(diào)函數(shù)中的坑

    這篇文章主要介紹了詳解關(guān)于微信setData回調(diào)函數(shù)中的坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • JS防止用戶多次提交的簡單代碼

    JS防止用戶多次提交的簡單代碼

    這篇文章介紹了JS防止用戶多次提交的簡單代碼,有需要的朋友可以參考一下
    2013-08-08
  • js倒計(jì)時(shí)搶購實(shí)例

    js倒計(jì)時(shí)搶購實(shí)例

    這篇文章主要介紹了js倒計(jì)時(shí)簡單實(shí)現(xiàn)方法,方便一些提示重要日期的來臨,本實(shí)例特別適合用于商品倒計(jì)時(shí)搶購活動(dòng),感興趣的小伙伴們可以參考一下
    2015-12-12
  • 在JavaScript中,為什么要盡可能使用局部變量?

    在JavaScript中,為什么要盡可能使用局部變量?

    在JavaScript中,我們應(yīng)該盡可能的用局部變量來代替全局變量,這句話所有人都知道,可是這句話是誰先說的?為什么要這么做?有什么根據(jù)么?
    2009-04-04
  • JavaScript數(shù)組_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    JavaScript數(shù)組_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了JavaScript數(shù)組的相關(guān)知識,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-06-06
  • JavaScript 未結(jié)束的字符串常量常見解決方法

    JavaScript 未結(jié)束的字符串常量常見解決方法

    做JavaScript的時(shí)候,發(fā)現(xiàn)老是出現(xiàn)錯(cuò)誤:“未結(jié)束的字符串常量”. 自己找了下應(yīng)該是傳參數(shù)的時(shí)候,有特殊字符引起的.網(wǎng)上也找了下,也有好多出現(xiàn)這種情況.做下總結(jié),以方便以后查閱.
    2010-01-01
  • uniapp獲取頁面高度與元素高度簡單示例

    uniapp獲取頁面高度與元素高度簡單示例

    在實(shí)際開發(fā)中我們會(huì)遇到不確定高度的情況,那么在uniapp中我們?nèi)绾潍@取區(qū)域的高度吶?這篇文章主要給大家介紹了關(guān)于uniapp獲取頁面高度與元素高度的相關(guān)資料,需要的朋友可以參考下
    2023-09-09

最新評論