有序的异步任务

如果你有一系列的相互依赖的异步任务,那么你就需要嵌套这些异步任务的回调函数。比如,你需要拷贝一份文件的内容,那么你首先要读取该文件的内容,然后把它写入到另一份文件中。这意味着,你需要在readFile的回调函数中调用writeFile

const fs = require('fs')
fs.readFile('file.txt', 'utf-8', function readContent(err, content) {
  if (err) {
    return console.log(err)
  }
  fs.writeFile('copy.txt', content, function(err) {
    if (err) {
      return console.log(err)
    }
    return console.log('done')
  })
})

现在,如果你有许多相互依赖的异步任务,你可能会感到混乱。在这样的情形下,我们最好独立地声明每一个函数,并给它们一个有意义的名称,以此来避免混乱:

const fs = require('fs')

fs.readFile('file.txt', 'utf-8', readCb)

function readCb(err, content) {
  if (err) {
    return console.log(err)
  }
  return fs.writeFile('copy.txt', content, writeCb)
}

function writeCb(err) {
  if (err) {
    return console.log(err)
  }
  return console.log('Done')
}

上面的代码片段中,我们单独定义了两个函数,readCbwriteCb。或许,从上面的例子看到的好处尚不明显,但是对于多重异步操作下,为异步函数命名会为你避免不少烦恼。

用户头像
登录后发表评论