回调函数节点的回调js

问题描述:

所以在Node中我们使用异步函数。为此,我们使用回调函数作为参数。但是,如何在执行最后的函数后终止代码呢?只需传递空函数?这里的例子:回调函数节点的回调js

fs.mkdir('stuff', function(){ 
    fs.readFile('readMe.txt', 'utf8', function(err, data) { 
     fs.writeFile('./stuff/writeMe.txt', data); 
    }); 
}); 

的mkdir有回调函数 - 无一不精

READFILE有回调函数 - 无一不精

WriteFile的已经不是回调函数,因为这就是我想要做的最后一件事,后来我在控制台中出现错误: “DeprecationWarning:不建议调用不带回调的异步函数。”

我应该每次都这样做,传递一个空函数作为回调来避免错误?最佳做法是什么?

+0

你的回调不处理任何错误条件.... –

我应该每次都这样做,传递一个空函数作为回调以避免错误?

什么是我们的最佳做法?

传递函数并处理它报告的任何错误。您还需要处理来自mkdirreadFile的错误,该错误当前您将忽略。

例如为:

fs.mkdir('stuff', function(err) { 
    if (err) { 
     // Do something with the fact mkdir failed 
    } else { 
     fs.readFile('readMe.txt', 'utf8', function(err, data) { 
      if (err) { 
       // Do something with the fact readFile failed 
      } else { 
       fs.writeFile('./stuff/writeMe.txt', data, function(err) { 
        if (err) { 
         // Do something with the fact writeFile failed 
        } 
       }); 
      } 
     }); 
    } 
}); 

...这是回调地狱,这是使用的承诺,而不是动机的一部分的公平例子。你可以promisify FS的API(使用任何一些库,如promisify),并像这样做:

fsp.mkdir('stuff') 
.then(() => fsp.readFile('readMe.txt', 'utf8')) 
.then(data => fsp.writeFile('./stuff/writeMe.txt', data)) 
.catch(err => { 
    // Do something with the fact something failed 
}); 

...其中fsp对于promisified FS API一个plaeholder。

在节点8.x中+,你可以使用async/await写同步看代码与promisified的API:

// This must be inside an `async` function 
try { 
    fsp.mkdir('stuff'); 
    const data = await fsp.readFile('readMe.txt', 'utf8'); 
    await fsp.writeFile('./stuff/writeMe.txt', data); 
} catch (err) { 
    // Do something with the fact something failed 
} 
+0

借调。始终处理错误以获得最佳实践。永远不知道会出现什么问题。 –

+0

Thx为回应,我会读一点,所以我明白你的答案,然后我会接受它。 – user3784950

可以使用writeFileSync代替。

fs.mkdir('stuff', function(){ 
    fs.readFile('readMe.txt', 'utf8', function(err, data) { 
     fs.writeFileSync('./stuff/writeMe.txt', data); 
    }); 
}); 
+0

只是不在需要响应的服务器应用程序中。当然,一个控制台脚本。但是在一个控制台脚本中,你可以使用所有三个版本的'Sync'版本。 –

+0

我认为节点的重点是在服务器应用程序中根本不使用阻塞同步版本? – user3784950

+0

是的。我只是提供了OP所要求的直接解决方案,这是一个没有回调的“writeFile”。 –