zoukankan      html  css  js  c++  java
  • 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
        })
      })
    })
    
    
  • 相关阅读:
    java的泛型
    JAVA集合类--(一闪而过)
    java面向对象- -一闪而过
    进制转换之二进制与十进制转换
    跳跃表-原理及Java实现
    Excel二次开发相关代码
    程序员学炒股(7) 股市心得
    程序员学炒股(7) 股指期货收盘价对第二天开盘价有影响吗?
    程序员学炒股(6) 让我们来看一下7月份A股的表现
    程序员学炒股(5) 股指交割日效应是否存在?
  • 原文地址:https://www.cnblogs.com/amize/p/14869300.html
Copyright © 2011-2022 走看看