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

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

如果序列中的承諾之一拋出錯(cuò)誤,則按順序解決承諾并打破序列

如果序列中的承諾之一拋出錯(cuò)誤,則按順序解決承諾并打破序列

假設(shè)我async設(shè)置了三個(gè)函數(shù),如下所示:const stepOne = async () => { setTimeout(function() {  console.log("step 1")}, 3000)  }const stepTwo = async () => { throw new Error("Error at step two") }const stepThree = async () => { console.log("step 3") }我將如何按順序執(zhí)行所有這些函數(shù)并在 stepTwo 處打破承諾鏈,不允許 stepThree 函數(shù)運(yùn)行?所以,正常順序是這樣的:stepOne --> stepTwo --> stepThree在 stepTwo 處拋出錯(cuò)誤的序列:stepOne --> stepTwo在 stepTwo 拋出的錯(cuò)誤需要在 end catch 塊中被捕獲。更新#1:錯(cuò)過(guò)了問(wèn)題的關(guān)鍵要素。await 不能使用,因?yàn)檫@三個(gè)函數(shù)需要在非異步函數(shù)中調(diào)用。例子:const testFunc = () => {     resolve three promises   sequentially, break the promise chain when error is thrown   and ultimately, catch errors here     }
查看完整描述

3 回答

?
12345678_0001

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

如果您解決承諾,您的代碼將起作用stepOne,因?yàn)閟etTimeout只是將函數(shù)添加到堆棧而不是等待它解決。


如果您要返回一個(gè) PromisestepOne并在之后解決它,console.log那么它將try catch等待stepOne并捕獲錯(cuò)誤stepTwo


這是您的代碼示例


const stepOne = async () => {

    return new Promise((resolve, reject) => {

        setTimeout(function() {

            console.log("step 1")

            resolve(true);

        }, 3000)

    });

}


const stepTwo = async () => { throw new Error("Error at step two") }


const stepThree = async () => {

    return new Promise((resolve, reject) => {

        setTimeout(function() {

            console.log("step 3")

            resolve(true);

        }, 3000)

    });

}



(() => {

    stepOne()

        .then(stepTwo)

        .then(stepThree)

        .catch(error => {

            console.log(error);

        })  

})();

現(xiàn)在console.log看起來(lái)像這樣


step 1

Error: Error at step two

    at stepTwo (/home/user/develop/test/stackoverflow.js:10:38)

    at processTicksAndRejections (internal/process/task_queues.js:93:5)


查看完整回答
反對(duì) 回復(fù) 2023-03-10
?
慕絲7291255

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

請(qǐng)嘗試以下代碼。您需要等待每次調(diào)用(stepOne、stepTwo 和 stepThree),以便在出現(xiàn)異常時(shí)不會(huì)進(jìn)行下一次調(diào)用。


try {

    await stepOne();

    await stepTwo();

    await stepThree()

} catch (error) {

    console.log(error);

}


查看完整回答
反對(duì) 回復(fù) 2023-03-10
?
素胚勾勒不出你

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

如果您的步驟是返回 Promise 的函數(shù),您可以創(chuàng)建一個(gè)包裝函數(shù),它將按順序調(diào)用每個(gè)步驟并在步驟失敗時(shí)中止,并記錄失敗步驟的詳細(xì)信息。


在此示例中,每個(gè)步驟失敗的概率為五分之一。


// Make a step proc, that throws 1 time in 5

function createStep(index) {

    let error = (Math.random() < 0.2) ? new Error(`Step ${index+1} error`) : null ;

    return () => new Promise((resolve, reject) => setTimeout(error ? reject(error): resolve(`Step ${index+1} outcome`), 500));

}


async function runSteps(steps) {

   

   for(stepIndex = 0; stepIndex < steps.length; stepIndex++) {

       try {

         console.log(`Running step #${stepIndex+1}...`);

         let result = await steps[stepIndex]();

         console.log(`Step result:`, result);

       } catch (e) { 

         console.error(`An error occurred at step #${stepIndex+1}:`, e.message);

         break;

       }

       if (stepIndex === (steps.length -1) ) {

          console.log("All steps completed successfully");

       }

   }

}


let steps = Array.from( { length: 3 }, (v,k) => createStep(k));

runSteps(steps);


查看完整回答
反對(duì) 回復(fù) 2023-03-10
  • 3 回答
  • 0 關(guān)注
  • 137 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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