AsyncTimeout 只是将 setTimeout 包装在一个 promise 中,以便它可以在 promise 链中使用。但是我没有看到实施的好地方reject()function asyncTimeout(time, callback) { return new Promise((resolve, reject) => { setTimeout(() => { const results = callback(); resolve(results); }, time ); });}asyncTimeout(1000, (test) => { console.log('resloved');}).then(()=>{ console.log('now what')});
1 回答
慕桂英546537
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);
});
添加回答
举报
0/150
提交
取消