gpt4 book ai didi

javascript - 如何进行正确的 Node.js 错误回调?

转载 作者:搜寻专家 更新时间:2023-11-01 00:42:16 27 4
gpt4 key购买 nike

我正在尝试创建一个包含回调的适当异步函数,但显然我的方法行不通。

这是我的代码:

var fs = require('fs');
var path = require('path');

var tmp = 0;
var i = 0;

function getFilesByExtArgs(dir, ext, function(err)){
if (err){
console.log("Error: " + err.code + " (" + err.message + ")");
return;
}
else{
fs.readdir(dir, function (err, data){
while (i <= data.length){
if (path.extname(data[i]) == ('.' + ext))
console.log(data[i]);
i++;
}
});
}
}
module.exports = getFilesByExtArgs;

当我尝试启动它时,出现以下错误:

function getFilesByExtArgs(dir, ext, function(err)){
^^^^^^^^
SyntaxError: Unexpected token function

我怎样才能使它成为“Node 方式”?

最佳答案

您只需要为您的函数提供一个参数,然后调用它。然后,您可以期望函数的调用者为该参数提供回调函数。

另一个错误是您使用了 while环形。如果你使用 for 会更好循环并声明 i里面的变量。这样,您可以确保没有其他函数会触及 i。变量。

此外,而不是 i <= data.length你需要i < data.length .如果您访问 data[data.length]你会超出范围。

当然在getFilesByExtArgs里面function 你可能想检查参数是否真的是一个函数。你可以用 typeof 来做运算符(operator)。例如:

if (typeof(callback) !== "function") {
throw new Error("The callback parameter must be a function");
}

这是您的代码,具有固定的语法:我假设您不仅需要针对错误的回调,还需要针对实际结果的回调?然后你可以这样做:

var fs = require('fs');
var path = require('path');

function getFilesByExtArgs (dir, ext, callback) {
if (typeof(callback) !== "function") {
throw new Error("The callback parameter must be a function");
}
fs.readdir(dir, function (err, data) {
if (err) {
return callback(err);
}
var results = [];
for (var i = 0; i < data.length; i++) {
if (path.extname(data[i]) == ('.' + ext)) {
results.push(data[i]);
}
}
callback(null, results);
});
}

你可以这样调用它:

getFilesByExtArgs('/my/file/path', 'txt', function (err, results) {
if (err) {
// Something bad happened
console.log("an error occoured!");
return;
}

// You can use the results array
console.log("printing the results:");
for (var i = 0; i < results.length; i++) {
console.log(i, results[i]);
}
});

希望这对您有所帮助。

关于javascript - 如何进行正确的 Node.js 错误回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30598108/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com