最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在頂層使用異步/等待?

如何在頂層使用異步/等待?

蕭十郎 2019-12-18 16:33:06
我一直在瀏覽async/ await在瀏覽了幾篇文章之后,我決定自己測(cè)試一下。但是,我似乎無(wú)法解決為什么不起作用的問(wèn)題:async function main() {      var value = await Promise.resolve('Hey there');    console.log('inside: ' + value);    return value;}var text = main();  console.log('outside: ' + text);控制臺(tái)輸出以下內(nèi)容(節(jié)點(diǎn)v8.6.0):>外部:[對(duì)象承諾]>內(nèi)部:嘿為什么函數(shù)內(nèi)部的日志消息隨后執(zhí)行?我認(rèn)為創(chuàng)建async/ 的原因await是為了使用異步任務(wù)執(zhí)行同步執(zhí)行。有沒(méi)有辦法可以使用函數(shù)內(nèi)部返回的值而不使用.then()after main()?
查看完整描述

3 回答

?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

我似乎無(wú)法繞開(kāi)為什么這行不通的想法。


因?yàn)閙ain回報(bào)承諾;所有async功能都可以。


在頂層,您必須:


使用async永不拒絕的頂層函數(shù)(除非您希望出現(xiàn)“未處理的拒絕”錯(cuò)誤),或者


使用then和catch,或


(即將推出?。┦褂庙攲觓wait,該提案已進(jìn)入允許在模塊中頂層使用的過(guò)程中的第3階段await。


#1- async永不拒絕的頂級(jí)功能

(async () => {

    try {

        var text = await main();

        console.log(text);

    } catch (e) {

        // Deal with the fact the chain failed

    }

})();

注意catch; 您必須處理Promise拒絕/異步異常,因?yàn)闆](méi)有其他事情要做;您沒(méi)有呼叫者將其傳遞給。如果愿意,可以在通過(guò)catch函數(shù)(而不是try/ catch語(yǔ)法)調(diào)用它的結(jié)果上執(zhí)行此操作:


(async () => {

    var text = await main();

    console.log(text);

})().catch(e => {

    // Deal with the fact the chain failed

});

...更加簡(jiǎn)潔(出于這個(gè)原因,我喜歡它)。


或者,當(dāng)然,不處理錯(cuò)誤,而只允許“未處理的拒絕”錯(cuò)誤。


#2- then和catch

main()

    .then(text => {

        console.log(text);

    })

    .catch(err => {

        // Deal with the fact the chain failed

    });

catch如果鏈或您的then處理程序中發(fā)生錯(cuò)誤,則將調(diào)用該處理程序。(請(qǐng)確保您的catch處理程序不會(huì)拋出錯(cuò)誤,因?yàn)闆](méi)有任何內(nèi)容可以處理。)


或兩個(gè)參數(shù)then:


main().then(

    text => {

        console.log(text);

    },

    err => {

        // Deal with the fact the chain failed

    }

);

再次注意,我們正在注冊(cè)一個(gè)拒絕處理程序。但是,以這種形式,請(qǐng)確保您的then回調(diào)都不會(huì)引發(fā)任何錯(cuò)誤,也沒(méi)有任何內(nèi)容可以處理。


#3頂級(jí)await模塊

您不能await在非模塊腳本的頂層使用await,但是頂層建議(第3階段)允許您在模塊的頂層使用它。這與使用頂級(jí)async函數(shù)包裝器(上面的#1)相似,因?yàn)槟幌M捻敿?jí)代碼拒絕(拋出錯(cuò)誤),因?yàn)檫@將導(dǎo)致未處理的拒絕錯(cuò)誤。因此,除非您要在出現(xiàn)問(wèn)題時(shí)遇到未處理的拒絕,例如#1,否則您需要將代碼包裝在錯(cuò)誤處理程序中:


// In a module, once the top-level `await` proposal lands

try {

    var text = await main();

    console.log(text);

} catch (e) {

    // Deal with the fact the chain failed

}


查看完整回答
反對(duì) 回復(fù) 2019-12-18
?
波斯汪

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊

解決此問(wèn)題的實(shí)際方法是采用不同的方法。


您的目標(biāo)可能是某種初始化,通常發(fā)生在應(yīng)用程序的頂層。


解決方案是確保應(yīng)用程序的頂層僅存在一個(gè)JavaScript語(yǔ)句。如果您的應(yīng)用程序頂部只有一條語(yǔ)句,那么您可以在其他任何地方隨意使用async / await(當(dāng)然要遵循常規(guī)語(yǔ)法規(guī)則)


換句話說(shuō),將整個(gè)頂層包裝在一個(gè)函數(shù)中,使其不再是頂層,并且解決了如何在應(yīng)用程序的頂層運(yùn)行異步/等待的問(wèn)題,而您卻沒(méi)有。


這是應(yīng)用程序的頂層外觀:


import {application} from './server'


查看完整回答
反對(duì) 回復(fù) 2019-12-18
  • 3 回答
  • 0 關(guān)注
  • 980 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)