Javascript 我的回电怎么了?
这是文件“path info.js”,它有两个函数:pathInfo和callback。Pathinfo从对象“info”中的路径收集有关文件的所有信息,回调获取该对象并返回它。代码:Javascript 我的回电怎么了?,javascript,node.js,callback,Javascript,Node.js,Callback,这是文件“path info.js”,它有两个函数:pathInfo和callback。Pathinfo从对象“info”中的路径收集有关文件的所有信息,回调获取该对象并返回它。代码: "use strict"; const fs = require("fs"); let getInfo = function (err, someObject) { if (err) throw err; return someObject; }; function pathInfo(path
"use strict";
const fs = require("fs");
let getInfo = function (err, someObject) {
if (err) throw err;
return someObject;
};
function pathInfo(path, callback) {
let info = {};
info.path = path; // write path info
fs.stat(path, (err, type) => { // write type info
if (type.isFile()) {
info.type = "file";
}
if (type.isDirectory()) {
info.type = "directory";
} else {
info.type = "undefined";
}
});
fs.stat(path, (err, type) => { // write content info if it is file
if (type.isFile()) {
fs.readFile(path, "utf8", (err, content) => {
info.content = content;
});
} else {
info.content = "undefined";
}
});
fs.stat(path, (err, type) => { // write childs if it is directory
if (type.isDirectory()) {
fs.readdir(path, (err, childs) => {
info.childs = childs
});
} else {
info.childs = "undefined";
}
});
getInfo(null, info); // callback returns object "info"
}
module.exports = pathInfo;
我使用的回调函数如图所示,例如,这里:。不过,这段代码不起作用,我也不知道为什么
我使用文件“test.js”调用此代码,代码如下:
const pathInfo = require('./path-info');
function showInfo(err, info) {
if (err) {
console.log('Error occurred');
return;
}
switch (info.type) {
case 'file':
console.log(`${info.path} — is File, contents:`);
console.log(info.content);
console.log('-'.repeat(10));
break;
case 'directory':
console.log(`${info.path} — is Directory, child files:`);
info.childs.forEach(name => console.log(` ${name}`));
console.log('-'.repeat(10));
break;
default:
console.log('Is not supported');
break;
}
}
pathInfo(__dirname, showInfo);
pathInfo(__filename, showInfo);
所以逻辑是,我需要给我的回调对象包含一些关于目录或文件的信息。根据这一点,将显示一些console.log
任何帮助都将不胜感激强>
UPD:更新了代码,将我的“回调”函数重命名为“getInfo”。A回调是作为参数传递给另一个函数的函数 在您的例子中,第二个参数是functionshowInfo,它是您的回调函数。函数pathInfo接受两个参数,第二个参数是showInfo 因此,当您调用它时,您会使用一些参数执行showInfo中的代码,这些参数通常是err,然后是其他参数 在本例中,您在showInfo中命名第二个参数“callback”,因此必须使用所请求的参数(err和info)执行它 例如:
function myfunc (parameter,cb) {
cb(null,{});
}
myfunc("one", function (err,res) {
console.log(err);
});
其中“myfunc”中的“cb”是作为第二个参数发送的函数
它可以这样写,因为你这样做:
var cb = function (err,res) {
console.log(err);
}
myfunc("one",cb);
回调是作为参数传递给另一个函数的函数 在您的例子中,第二个参数是functionshowInfo,它是您的回调函数。函数pathInfo接受两个参数,第二个参数是showInfo 因此,当您调用它时,您会使用一些参数执行showInfo中的代码,这些参数通常是err,然后是其他参数 在本例中,您在showInfo中命名第二个参数“callback”,因此必须使用所请求的参数(err和info)执行它 例如:
function myfunc (parameter,cb) {
cb(null,{});
}
myfunc("one", function (err,res) {
console.log(err);
});
其中“myfunc”中的“cb”是作为第二个参数发送的函数
它可以这样写,因为你这样做:
var cb = function (err,res) {
console.log(err);
}
myfunc("one",cb);
万一有人感兴趣。。我找到了一个解决方案,它是有效的!正如@ADreNaLiNe DJ正确指出的,当我调用getInfo callback返回info对象时,我的回调并没有完成。因此,解决方法是改变我的抽象级别:我所做的只是将回调粘贴到函数中。请参阅该代码:
"use strict";
const fs = require("fs");
let pathInfo = (path, callback) => {
let info = {};
info.path = path;
fs.stat(path, (err, type) => {
if (err) throw err;
if (type.isFile()) {
info.type = "file";
fs.readFile(path, "utf8", (err, content) => {
info.content = content;
info.childs = undefined;
callback(err, info);
});
}
if (type.isDirectory()) {
info.type = "directory";
fs.readdir(path, (err, childs) => {
info.childs = childs;
info.content = undefined;
callback(err, info);
});
}
});
};
let showInfo = (err, info) => { // Отсюда и ниже вставлен код из текста
if (err) { // из домашнего задания
console.log('Возникла ошибка при получении информации');
return;
}
switch (info.type) {
case 'file':
console.log(`${info.path} — является файлом, содержимое:`);
console.log(info.content);
console.log('-'.repeat(10));
break;
case 'directory':
console.log(`${info.path} — является папкой, список файлов и папок в ней:`);
info.childs.forEach(name => console.log(` ${name}`));
console.log('-'.repeat(10));
break;
default:
console.log('Данный тип узла не поддерживается');
break;
}
};
pathInfo(__dirname, showInfo);
pathInfo(__filename, showInfo);
PS:对不起,俄文console.logs,希望它不会打扰您(它们对理解它的工作原理没有任何价值)以防有人感兴趣。。我找到了一个解决方案,它是有效的!正如@ADreNaLiNe DJ正确指出的,当我调用getInfo callback返回info对象时,我的回调并没有完成。因此,解决方法是改变我的抽象级别:我所做的只是将回调粘贴到函数中。请参阅该代码:
"use strict";
const fs = require("fs");
let pathInfo = (path, callback) => {
let info = {};
info.path = path;
fs.stat(path, (err, type) => {
if (err) throw err;
if (type.isFile()) {
info.type = "file";
fs.readFile(path, "utf8", (err, content) => {
info.content = content;
info.childs = undefined;
callback(err, info);
});
}
if (type.isDirectory()) {
info.type = "directory";
fs.readdir(path, (err, childs) => {
info.childs = childs;
info.content = undefined;
callback(err, info);
});
}
});
};
let showInfo = (err, info) => { // Отсюда и ниже вставлен код из текста
if (err) { // из домашнего задания
console.log('Возникла ошибка при получении информации');
return;
}
switch (info.type) {
case 'file':
console.log(`${info.path} — является файлом, содержимое:`);
console.log(info.content);
console.log('-'.repeat(10));
break;
case 'directory':
console.log(`${info.path} — является папкой, список файлов и папок в ней:`);
info.childs.forEach(name => console.log(` ${name}`));
console.log('-'.repeat(10));
break;
default:
console.log('Данный тип узла не поддерживается');
break;
}
};
pathInfo(__dirname, showInfo);
pathInfo(__filename, showInfo);
PS:对不起,俄文console.logs,希望它不会打扰您(它们不会给理解它的工作原理带来任何价值)Define“不工作”。这是因为您在
path info.js
中声明了一个名为callback
的变量。重命名它将解决您的问题。您收到了什么错误消息?@DaveNewton此时写着“不受支持”,但我100%确定应该有另一个console.log(不是默认情况…)@ADreNaLiNe DJ将其重命名为“getInfo”(只是另一个名称),仍然不起作用..定义“不工作”。这是因为您在path info.js
中声明了一个名为callback
的变量。重命名它将解决您的问题。您收到了什么错误消息?@DaveNewton此时写着“不受支持”,但我100%确定应该有另一个console.log(不是默认情况…)@ADreNaLiNe DJ将其重命名为“getInfo”(只是另一个名称),仍然不起作用。。