Nodejs Callback Callback
Nodejs Callback Callback
在写个判断函数时,大概是想可以这样调用
validStr('xxx', 2, 10)
但是又想在当判断的过程抛出异常
于是写成
function validStr(str, min, max){
if(){
...
return true;
}
else{
...
this.callback();
return false;
}
}
于是调用也变成了
validStr.call({callback: throwError.bind(null, 'error!')}, str, 2, 10)
嘶 等等 怎么有种怪怪的赶脚
既然都这样调用了 那这样是不是更好点呢
function validStr(str, min, max, callback){
if(){
...
return true;
}
else{
...
callback();
return false;
}
}
validStr(str, 2, 10, throwError.bind(null, 'error!'))
洗澡睡觉!
3 回复
Node.js Callback Callback
在编写一个字符串验证函数时,你可能希望这样调用:
validStr('xxx', 2, 10);
但有时你也希望在验证过程中能够抛出异常。于是你可能会写出这样的代码:
function validStr(str, min, max) {
if (str.length >= min && str.length <= max) {
return true;
} else {
// 这里应该有一个回调来处理错误情况
this.callback();
return false;
}
}
然后你的调用方式会变成这样:
validStr.call({callback: throwError.bind(null, 'error!')}, str, 2, 10);
但这样做似乎有点怪异。既然都使用了回调,为什么不直接将回调作为参数传递给函数呢?这样代码会更清晰易懂。
修改后的代码可以这样写:
function validStr(str, min, max, callback) {
if (str.length >= min && str.length <= max) {
return true;
} else {
// 使用传入的回调函数处理错误
callback('error!');
return false;
}
}
// 调用函数并传入回调
validStr(str, 2, 10, throwError);
其中 throwError
函数定义如下:
function throwError(errorMsg) {
console.error(errorMsg);
throw new Error(errorMsg);
}
示例代码解析
-
函数定义:
validStr
函数接受四个参数:str
(要验证的字符串),min
和max
(字符串长度的最小值和最大值),以及一个回调函数callback
。- 如果字符串长度在指定范围内,则返回
true
。 - 否则,调用
callback
函数,并传递错误信息。
-
回调函数:
throwError
是一个简单的回调函数,它接收一个错误信息,并将其打印到控制台,然后抛出一个错误。
-
调用函数:
- 调用
validStr
函数时,传入字符串'xxx'
、最小长度2
和最大长度10
,同时传入throwError
函数作为回调。
- 调用
通过这种方式,代码更加简洁明了,逻辑也更清晰。这样不仅能够处理错误,还能保持代码的一致性和可读性。
不是异步的,直接throw就行了
在Node.js中,使用回调函数(callback)是一种常见的处理异步操作的方式。你提到的需求是通过一个函数来验证字符串长度,并在验证失败时抛出异常或执行某个回调函数。
以下是改进后的实现方式:
function validStr(str, min, max, callback) {
if (str.length < min || str.length > max) {
callback(new Error('Invalid string length'));
return false;
} else {
return true;
}
}
function throwError(error) {
throw error;
}
// 使用示例
try {
validStr('short', 5, 10, throwError);
} catch (error) {
console.error(error.message); // 输出 "Invalid string length"
}
在这个例子中:
validStr
函数接收一个字符串str
和两个数字min
和max
,以及一个回调函数callback
。- 如果字符串长度不在指定范围内,则调用
callback
并传递一个错误对象。 - 在调用
validStr
时,使用throwError
函数作为回调函数来抛出错误。 - 由于我们希望捕获并处理错误,所以将
validStr
的调用包裹在一个try...catch
块中。
这种方式既保持了回调函数的灵活性,又可以在需要时进行错误处理。