js异步编程思想【node的精华】

  1. JS回调函数中无法改变外部变量的问题
# abc = res 操作的时候,res还没有结果
var abc;

Article.findArticle({}, function (err, res) {
    if (err) {
        console.log(err);
    } else {
        //操作查询出的文章
        abc = res;
    }
});


https://blog.csdn.net/qq_23870025/article/details/77920898
  1. 遇到问题,无法push内容到外部的列表
var dirList = [];
var fileList =[];
files.forEach(function(iterm){
  var fullPath =  path.join(wwwDir,iterm);

  // 异步  这里异步处理会无法修改外部的list,data的结果滞后于代码执行【不知道这样理解对不对】
  fs.stat(fullPath, function(err, data){
    if (err) {
        console.log(err);
    } else {
        if (data.isFile()){
          fileList.push(iterm)
          // console.log('file: ',fileList)
        }else{
          dirList.push(iterm)
        }
    }
  });

  // 同步 
  var stat = fs.lstatSync(fullPath);
  console.log(fullPath,stat.mtime)
  if (stat.isFile()){
    fileList.push({'fullPath':fullPath,'fileSise':stat.size,'mtime':stat.mtime});
  }else{
    console.log(fullPath)
    dirList.push(fullPath);
  }

});

console.log('dir: ',dirList)
console.log('file: ',fileList)
  1. JS异步api的封装【必须通过回调函数】【回调函数作用:获取异步的结果】
// 模板概念
function fn(callback) {
  // var callback = function (data) { console.log(data) }

  setTimeout(function () {
    var data = 'hello'
    callback(data)
  }, 1000)
}

// 如果需要获取一个函数中异步操作的结果,则必须通过回调函数来获取
fn(function (data) {
  console.log(data)
})




//应用
/*
*获取所有学生列表
*callback
* 第一个参数是err
    成功是null
    错误 错误对象
* 第二个参数是 结果
    成功是 数组
    错误 undefined
*/
exports.find = function (callback) {
  fs.readFile(dbPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    callback(null, JSON.parse(data).students)
  })
}

//调用【find使用方法】
var Student = require('./student')
router.get('/students', function (req, res) {
  Student.find(function (err, students) {
    if (err) {
      return res.status(500).send('Server error.')
    }
    res.render('index.html', {
      fruits: [
        '苹果',
        '香蕉',
        '橘子'
      ],
      students: students
    })
  })
})

posted @ 2021-06-09 23:13  该显示昵称已被使用了  阅读(45)  评论(0编辑  收藏  举报