好吧,我似乎很难开始思考.. um.. 功能方式.. 或异步方式。
我对 node.js 比较陌生,但我在 c#、java、c++ 方面有多年的经验。
图片 我有简单的任务。这个任务的想法是每一行都应该在前一行完成之后执行(阻塞操作)。让我说,c# 中的正常方法。另外,(这就是这篇文章的原因)让我们假设我们的代码中有一个条件行。其伪代码如下:
f = OpenFile("aaa.txt")
If f.ReadLine(1) == "bbb" // read the first line
line = f.ReadLine(2) // read the second line
else
line = ReadLine(3) // read the third line
DataBase.Insert(line) // store the line in some database, lets say in mysql
DeleteFile(f)
很简单。现在,据我了解,node.js 通过向几乎每个函数添加回调来使用非阻塞方法。这样一来,这个简单的任务对我来说似乎成了一场噩梦。如果我尝试重现上面的代码,它将如下所示:
OpenFile(f, function() {
ReadLine(f, 1, function(line) {
if line == "bbb" {
ReadLine(f,2, function(line) {
DataBase.Insert(line, function() {
DeleteFile(f);
});
});
{
else {
ReadLine(f,3, function(line) {
DataBase.Insert(line, function() { // the same again
DeleteFile(f);
});
});
}
});
});
好吧,你明白了。在这个例子中,如果我需要确保只有在文件成功打开后才会读取该行,我需要在回调中编写“下一行的逻辑”。而且我应该只在“上一行回调”中继续写“下一行逻辑”。如果我不这样做,我可能会遇到这种情况,例如,我会尝试读取未打开的文件的行我还要注意,在我的实际代码中,我确实使用了非阻塞函数,例如:
jsdom.env(..)
fs.exec(..)
我在上面代码中的方法是否正确?或者我错过了什么,我的方法完全错误?我希望有更好的解决方案和方法。
感谢您的时间。