万能的 V 友,Nodejs CodeWars: How can I throw an error here? 求解

发布于 1周前 作者 bupafengyu 来自 nodejs/Nestjs

万能的 V 友,Nodejs CodeWars: How can I throw an error here? 求解

codewars 里的一道题目,求解题思路

我目前的想法是:通过语法错误抛出 error,避免使用 throw。

但是如何在不使用 Error 的情况下,定义 Error 的 message。

另一个思路是如何不使用 throw 抛出一个自定义 message 的 error

Try to write a function named bang throwing an error with a message string "Just throw like this!" with these limits:

no invoking require function no invoking function constructors no invoking eval function no throw in your code no Error in your code no \ in your code Also, we removed fs, assert and vm from global scope, and removed assert from console. Do not modify Error in global scope, we do not use it to check.


6 回复

懒得知道,小学奥数有意思吗


Function.call 吧

可以具体说一下如何利用 call 吗,是指对抛异常的 function 用 call 传参数改变 error 的 message 吗

就是用 Function.call,传入字符串来构造函数,然后执行。效果相当于 eval 或者 new Function

我想到这个,不过异步的应该不符合题目
Promise.reject(‘error message’)

在 Node.js 中,你可以通过多种方式抛出错误。这取决于你的具体需求和上下文。下面是一些常见的方法,包括使用 throw 语句和自定义错误类。

方法一:使用 throw 语句

你可以直接在需要抛出错误的地方使用 throw 语句。例如:

function divide(a, b) {
    if (b === 0) {
        throw new Error("Division by zero is not allowed.");
    }
    return a / b;
}

try {
    console.log(divide(10, 0));
} catch (e) {
    console.error(e.message);
}

方法二:自定义错误类

你还可以创建自定义错误类,以便更好地处理特定类型的错误。例如:

class DivisionByZeroError extends Error {
    constructor(message) {
        super(message);
        this.name = "DivisionByZeroError";
    }
}

function divide(a, b) {
    if (b === 0) {
        throw new DivisionByZeroError("Division by zero is not allowed.");
    }
    return a / b;
}

try {
    console.log(divide(10, 0));
} catch (e) {
    if (e instanceof DivisionByZeroError) {
        console.error(`Caught a ${e.name}: ${e.message}`);
    } else {
        console.error(e.message);
    }
}

以上两种方法都可以帮助你在 Node.js 中抛出和处理错误。选择哪种方法取决于你的具体需求,比如是否需要区分不同类型的错误。希望这能帮助你解决问题!

回到顶部