我需要使用 Mocha 测试函数 testMe。但是当我的单元测试抛出错误时就会出现麻烦。这是简化的示例
function testMe(callback) {
new Promise((resolve, reject) => {
setTimeout(() => resolve([1,2,3]), 1000);
}).then((result) => {
callback(null, result);
}).catch((error) => {
callback(error, null)
});
}
testMe((err, result) => {
if(err) throw new Error();
if(result.length < 5) throw new Error();
});
在此示例中,在 throw 后运行 catch block 。但我只需要在拒绝后运行 catch block 。
编辑:
在这种情况下,脚本永远不会停止。我不明白为什么。
function testMe(callback) {
new Promise((resolve, reject) => {
setTimeout(() => resolve([1,2,3]), 1000);
}).then((result) => {
callback(null, result);
}, (error) => {
callback(error, null)
}).catch(() => {
console.log('Do not throw an error but still running');
});
}
testMe((err, result) => {
if(err) throw new Error();
if(result.length < 5) throw new Error();
});
最佳答案
当您使用 Promise 时,请从函数返回 Promise,而不是采用回调。
例如,而不是:
function testMe(callback) {
new Promise((resolve, reject) => {
// ...
});
}
用途:
function testMe(callback) {
return new Promise((resolve, reject) => {
// ...
});
}
这样你就可以为函数的调用者提供可用的 promise 。
如果您需要混合两种样式,即返回 Promise 和接受回调,请考虑使用可靠的库来为您处理该问题,特别是当您自己编写这些样式之间的转换时遇到困难时:
关于javascript - 保证不冒泡外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43318576/