gpt4 book ai didi

javascript - 保证不冒泡外

转载 作者:太空宇宙 更新时间:2023-11-04 03:26:58 25 4
gpt4 key购买 nike

我需要使用 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/

25 4 0
文章推荐: javascript - 在 `
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com