把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) })
Promise里在延時器里throw new Error,為什么不能被后面的reject回調或者
慕慕森
2019-03-15 13:15:56