第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

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

3 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

我似乎無法繞開為什么這行不通的想法。


因為main回報承諾;所有async功能都可以。


在頂層,您必須:


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


使用then和catch,或


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


#1- async永不拒絕的頂級功能

(async () => {

    try {

        var text = await main();

        console.log(text);

    } catch (e) {

        // Deal with the fact the chain failed

    }

})();

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


(async () => {

    var text = await main();

    console.log(text);

})().catch(e => {

    // Deal with the fact the chain failed

});

...更加簡潔(出于這個原因,我喜歡它)。


或者,當然,不處理錯誤,而只允許“未處理的拒絕”錯誤。


#2- then和catch

main()

    .then(text => {

        console.log(text);

    })

    .catch(err => {

        // Deal with the fact the chain failed

    });

catch如果鏈或您的then處理程序中發(fā)生錯誤,則將調用該處理程序。(請確保您的catch處理程序不會拋出錯誤,因為沒有任何內容可以處理。)


或兩個參數(shù)then:


main().then(

    text => {

        console.log(text);

    },

    err => {

        // Deal with the fact the chain failed

    }

);

再次注意,我們正在注冊一個拒絕處理程序。但是,以這種形式,請確保您的then回調都不會引發(fā)任何錯誤,也沒有任何內容可以處理。


#3頂級await模塊

您不能await在非模塊腳本的頂層使用await,但是頂層建議(第3階段)允許您在模塊的頂層使用它。這與使用頂級async函數(shù)包裝器(上面的#1)相似,因為您不希望您的頂級代碼拒絕(拋出錯誤),因為這將導致未處理的拒絕錯誤。因此,除非您要在出現(xiàn)問題時遇到未處理的拒絕,例如#1,否則您需要將代碼包裝在錯誤處理程序中:


// 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

}


查看完整回答
反對 回復 2019-12-18
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

解決此問題的實際方法是采用不同的方法。


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


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


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


這是應用程序的頂層外觀:


import {application} from './server'


查看完整回答
反對 回復 2019-12-18
  • 3 回答
  • 0 關注
  • 954 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號