1 回答

TA貢獻1848條經驗 獲得超10個贊
您可以將callback()調用包裝在try/catch塊中,并reject(err)在出現異常時調用:
function asyncTimeout(time, callback) {
return new Promise((resolve, reject) => {
setTimeout(() => {
try {
const results = callback();
resolve(results);
} catch(err) {
reject(err);
}
}, time );
});
}
然而,正確的解決方案是根本不將回調傳遞給asyncTimeout- 只需使用返回的承諾及其then方法!承諾將永遠實現,您不需要使用reject:
function asyncTimeout(time, callback) {
return new Promise(resolve => {
setTimeout(resolve, time);
});
}
asyncTimeout(1000).then(() => {
console.log('resolved');
throw new Error('oops');
console.log('now what');
}).catch(err => {
console.error('handled', err);
});
添加回答
舉報