javascript - 保证不冒泡外

标签 javascript node.js callback promise mocha.js

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

相关文章:

javascript - 在 Fabric.js 中用鼠标旋转东西的正确方法

javascript - 无法运行 Node.js 应用程序,因为 : 'Failed to lookup view "error"in views directory'

javascript - 如何在不使用 npm install 的情况下使用 nodemon

Javascript 回调超时

javascript - knockout : callback function when the content of a template changes

JavaScript 参数,意外数字错误

javascript - 遍历 div 内的输入

mysql - sequelize left join 也返回关联表的数据

node.js - 如何使用存储桶存储在 google flex/app engine 环境中提供静态文件?

multithreading - 回调如何在非阻塞设计中工作?