真正理解 node / js 中的基本回调
understanding REALLY basic callbacks in node / js
我试图通过编写一些 BASIC 测试来了解回调,看看会发生什么。我正在使用 mocha 运行 这个。显然,我是回调的新手,但我不明白为什么这不起作用。
import fs from 'fs';
describe('named callbacks', function() {
it('runs something using callbacks', function() {
function runTest() {
return fs.readFile('test.txt', onReadFile);
function onReadFile(err, data) {
if (err) {
console.log('error reading file', err);
return err;
}
fs.writeFile('testoutfile.txt', data, onWriteFile);
}
function onWriteFile(err, data) {
if (err) {
console.log('write error', err);
return err;
}
console.log('file written!', data);
}
}
runTest();
});
});
测试 运行s,它创建了输出文件,但没有写入任何内容,也没有记录任何错误。
我习惯于自上而下地编写程序,这种回调的东西让我这样的人感到困惑。我在这里命名我所有的回调,这样我就可以尝试遵循逻辑。我真的很想了解为什么这不起作用。
您需要向 Mocha 声明您的测试是异步的。您可以通过以下两种方式之一执行此操作:return 承诺,或使用 done
回调。您拥有的代码适用于后者:
describe('named callbacks', function() {
it('runs something using callbacks', function(done) {
function runTest() {
return fs.readFile('test.txt', onReadFile);
function onReadFile(err, data) {
if (err) {
console.log('error reading file', err);
done(err);
}
fs.writeFile('testoutfile.txt', data, onWriteFile);
}
function onWriteFile(err, data) {
if (err) {
console.log('write error', err);
done(err);
}
console.log('file written!', data);
done();
}
}
runTest();
});
});
变化是:
将done
作为参数添加到传递给it
的函数中。
将 return err
替换为 done(err)
。这会将错误传递给 Mocha。
在 onWriteFile
函数的末尾添加 done()
。
我试图通过编写一些 BASIC 测试来了解回调,看看会发生什么。我正在使用 mocha 运行 这个。显然,我是回调的新手,但我不明白为什么这不起作用。
import fs from 'fs';
describe('named callbacks', function() {
it('runs something using callbacks', function() {
function runTest() {
return fs.readFile('test.txt', onReadFile);
function onReadFile(err, data) {
if (err) {
console.log('error reading file', err);
return err;
}
fs.writeFile('testoutfile.txt', data, onWriteFile);
}
function onWriteFile(err, data) {
if (err) {
console.log('write error', err);
return err;
}
console.log('file written!', data);
}
}
runTest();
});
});
测试 运行s,它创建了输出文件,但没有写入任何内容,也没有记录任何错误。
我习惯于自上而下地编写程序,这种回调的东西让我这样的人感到困惑。我在这里命名我所有的回调,这样我就可以尝试遵循逻辑。我真的很想了解为什么这不起作用。
您需要向 Mocha 声明您的测试是异步的。您可以通过以下两种方式之一执行此操作:return 承诺,或使用 done
回调。您拥有的代码适用于后者:
describe('named callbacks', function() {
it('runs something using callbacks', function(done) {
function runTest() {
return fs.readFile('test.txt', onReadFile);
function onReadFile(err, data) {
if (err) {
console.log('error reading file', err);
done(err);
}
fs.writeFile('testoutfile.txt', data, onWriteFile);
}
function onWriteFile(err, data) {
if (err) {
console.log('write error', err);
done(err);
}
console.log('file written!', data);
done();
}
}
runTest();
});
});
变化是:
将
done
作为参数添加到传递给it
的函数中。将
return err
替换为done(err)
。这会将错误传递给 Mocha。在
onWriteFile
函数的末尾添加done()
。