亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Promise里在延時器里throw new Error,為什么不能被后面的reject回調或者

Promise里在延時器里throw new Error,為什么不能被后面的reject回調或者

慕慕森 2019-03-15 13:15:56
把throw new Error語句放延時函數里,只會報錯,不執行reject函數或者catch函數var promise = new Promise((resolve, reject) => {    setTimeout(() => {        throw new Error('nono') //這里主動拋出錯誤    }, 500);})    .then(()=>{},(err)=>{        console.log(1) //這里是reject時應該調用的函數,但是這里并沒有執行,只會在控制臺報錯        console.log(err) //根本不執行這里    })    .catch((err)=>{        console.log(2) //這里catch都不執行        console.log(err)    })而我不把throw new Error語句放延時函數里,就能在reject函數里執行var promise = new Promise((resolve, reject) => {    throw new Error('nono') //這里直接拋出錯誤,就能被后面的reject函數執行到})    .then(()=>{},(err)=>{        console.log(1) //這里就執行了        console.log(err)    })    .catch((err)=>{        console.log(2)        console.log(err)    })另外,不用throw new Error,而是直接reject(),不論是否放在延時函數里都能正常被捕獲var promise = new Promise((resolve, reject) => {    setTimeout(() => {        reject('hehe')    }, 500);})    .then(()=>{},(err)=>{        console.log(1) //可以捕獲        console.log(err)    })    .catch((err)=>{        console.log(2)        console.log(err)    })
查看完整描述

3 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

Promise沒關系,異步錯誤 javascript 本來就捕獲不到.
Promise只是一套處理異步邏輯的方案, 所以想用這套方案,就得按這套方案的規則寫代碼.

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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號