这是一篇学习笔记 各种融合的杂谈

Eslint学习

官网
中文教程

  • 安装Eslint
    npm i eslint@latest g

  • 配置文件 .eslintrc.json
    eslint --init

  • eslint test.js

    1:5  error  'username' is assigned a value but never used                    no-unused-vars
    3:4  error  Expected a conditional expression and instead saw an assignment  no-cond-assign
    3:4  error  Unexpected constant condition                                    no-constant-condition
    3:4  error  'a' is not defined                                               no-undef
    4:5  error  Unexpected console statement                                     no-console
    7:5  error  'age' is assigned a value but never used                         no-unused-vars
    9:1  error  'number' is not defined                                          no-undef
    
  • 安装vscode eslint插件 ESLint

nodejs数据库操作

sql传参方式

  • 字符串拼接
  var id = 10;var sql = "SEELCT * FROM user WHERE id = '+id+'";
  • 占位符
  var id = 10;var sql = "SEELCT * FROM user WHERE id = ?";var param = [id];query(sql,param,function(err,data){});

nodejs处理查询结果

    var sql = "SELECT id,username,password  FROM user WHERE username = ?";var param = ['小明'];// 1. SEELCT查询返回对象data是一个数组对象query(sql, param, function (err, data) {if (err) {console.log('查询用户出错!');return;}for(var i = 0; i < data.length; i++){console.log(data[i].username+ " "+data[i].password);}});

后台管理管理系统集成数据库

  • 下载安装mysql第三方包
    npm i mysql --save
  • 数据库操作模块引入 dbconnect.js
  • 路由跳转处代替数组

遇到问题

  • 封装的query函数 在关闭连接之后未重新创建

/*** 封装通用数据库操作函数*/
function query(sql, param,callFunction) {//1. 配置数据库连接参数,创建连接对象var connection = mysql.createConnection({host: '192.168.41.118',port: 3306,user: 'test',password: 'web1804',database: 'usermanager'});//1. 建立连接connection.connect();// 2. 发送SQL语句到mysql服务端执行connection.query(sql, param, callFunction);// 3. 关闭连接connection.end();
}

Promise

  • 什么是promise?

    Promise是JavaScript中的一个对象,“承诺将来会执行”,它以更优雅的方式实现javascript中的异步回调操作。

    Promise本意是承诺,在程序中的意思就是承诺我过一段时间后会给你一个结果。 什么时候会用到?答案是异步操作,异步是指可能比较长时间才有结果的操作,例如网络请求、读取本地文件等

    1.Promise的三种状态

    • Pending----Promise对象实例创建时候的初始状态
    • Fulfilled----可以理解为成功的状态
    • Rejected----可以理解为失败的状态

  • 为什么要学习promise?

Javascript是一种单线程的语言, 所有的代码必须按照所谓的“ 自上而下” 的顺序来执行。 本特性带来的问题, 在处理耗时操作时, 程序会阻塞, 这时需要使用异步编程;
异步编程的一种实现方式就是回调函数;
回调函数是 一个 解决方案, 但它并不完美。 两个很大的问题是:

  1. 颠倒的控制;
  2. 糟糕的错误处理.
  3. 异步任务回调嵌套.

回调嵌套或回调地狱

fs.readFile(filename, function (err, data) {if (err) {console.log('读文件出错' + err);} else {console.log(data.toString());fs.readFile(filename, function (err, data) {if (err) {console.log('读文件出错' + err);} else {console.log(data.toString());fs.readFile(filename, function (err, data) {if (err) {console.log('读文件出错' + err);} else {console.log(data.toString());}});}});}
});
  • promise基础使用?
var promise = new Promise(function(resolve,rejcted){//具体异步 db.query(sql,parameter,function(err,data){if(err){rejected(err);} else{resove(data);}});
}); promise.then(function(data){console.log(data); //成功兑现
}).catch(function(err){//处理错误
});

async-await

使用async/await,你可以轻松地达成之前promise做到的工作,它有如下特点:

  1. async/await是基于Promise实现的,它不用于普通的回调函数。
  2. async/await与Promise一样,是非阻塞的。
  3. async/await使得异步代码看起来像同步代码,这正是它的魔力所在。

示例

var fs = require('fs');function readFilePromise(path) {return new Promise(function (resolved, rejected) {fs.readFile(path, function (err, data) {if (err) {rejected(err);} else {resolved(data.toString());}});});
}async function readFile(){var data1 = await readFilePromise('hello.txt');console.log('data1 :'+data1);var data2 = await readFilePromise('hello1.txt');console.log('data2 :'+data2);var data3 = await readFilePromise('hello2.txt');console.log('data3 :'+data3);
}readFile();
  • try-catch-finally
var fs = require('fs');
var path = require('path');console.log('开始');
try {// 可能会发生异步的代码var path1 = path.join(path.resolve('.'), '08await','./hello.txt');var fileContent1 = fs.readFileSync(path1);console.log(fileContent1.toString());var path2 = path.join(path.resolve('.'), '08await', './hello1 1.txt');var fileContent2 = fs.readFileSync(path2);console.log(fileContent2.toString());var path3 = path.join(path.resolve('.'), '08await', './hello2.txt');var fileContent3 = fs.readFileSync(path3);console.log(fileContent3.toString());} catch (err) {// 处理异步的代码console.log('处理异步的代码 :' + err);
} finally {//最终都会执行的代码console.log('最终都会执行的代码');
}console.log('结束');
  • Promise异步任务并发执行
    Promise.all
    Promise.race

示例

var fs = require('fs');function readFilePromise(path) {return new Promise(function (resolved, rejected) {fs.readFile(path, function (err, data) {if (err) {rejected(err);} else {resolved(data.toString());}});});
}
// 最后一个异步任务执行完之后一起处理
Promise.all([readFilePromise('hello.txt'), readFilePromise('hello1.txt'), readFilePromise('hello2.txt')]).then(function (data) {console.log('data :' + data);});// 处理执行速度最快的异步任务
Promise.race([readFilePromise('hello.txt'), readFilePromise('hello1.txt'), readFilePromise('hello2.txt')]).then(function (data) {console.log('data :' + data);});

promise封装ajax

function ajaxPromise(json) {return new Promise(function(resolved,rejected){// 1. 获取 XmlHttpRequestvar xhr = getXHR();// 2. 打开连接发送请求xhr.open(json.method, json.url, true);xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); // 请求头部xhr.send(json.content);// 3. 处理响应xhr.onreadystatechange = function (e) {// 根据就绪码判断响应是否完成if (e.target.readyState === 4) {// 根据状态码判断成功失败if (e.target.status === 200) {resolved(e.target.responseText);}else{rejected('响应出错! 错误码: '+e.target.status);}}};});
}function getXHR() {if (window.XMLHttpRequest) {return new window.XMLHttpRequest;} else {// 兼容IE浏览器低版本new window.AtiveXObject('Microsoft.XMLHTTP');}}

注册里面调用封装的ajaxPromise

    var param = {method:'get',url:'/checkuser?username='+userInput.value};ajaxPromise(param).then(function(data){var jsonObj = JSON.parse(data);if(jsonObj.code === 1){isCheckSucess = false;span.style.color = 'red';span.innerHTML = jsonObj.msg; }else{isCheckSucess = true;span.innerHTML=''; }}).catch(function(err){console.log(err);});
}

fetch方法的使用

var promise = fetch('/checkuser?username='+userInput.value);promise.then(function(res){if(res.ok){return res.json(); // 将响应内容流转为json对象,以promise形式返回}else{// 失败处理return Promise.reject('响应出错 :'+res.status +' '+res.statusText);}}).then(function(data){// console.log('data :'+JSON.stringify(data));// var jsonObj = JSON.parse(data);if(data.code === 1){isCheckSucess = false;span.style.color = 'red';span.innerHTML = data.msg; }else{isCheckSucess = true;span.innerHTML=''; }}).catch(function(err){console.log(err);});}

promise Eslint sql传参方式 async-await相关推荐

  1. Deno 几种常用的传参方式

    视频讲解: https://www.bilibili.com/video/BV1BT4y1E7Nh/?p=8 我们一起来完成以下步骤: 以key-value方式传参 以value方式传参 使用oak ...

  2. 任务(多线程并行)TFDMemTable内存表传参方式调用服务器返回的TDataSet

    任务(多线程并行)TFDMemTable内存表传参方式调用服务器返回的TDataSet 服务器端: function TServerMethods1.getTFDDataSet   ( const p ...

  3. 【python教程入门学习】Python函数定义及传参方式详解(4种)

    这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...

  4. Android:页面跳转传参方式一,页面跳转传参方式二

     一.页面跳转传参方式一 跳转的过程如何传参:也就是页面之间如何传递参数,有点像函数调用如何传参,页面跳转也要传参. 复制一个工程 你要跳转,(现在的代码如下),intent 既然能设置跳转到哪个页面 ...

  5. mybatis传入数组怎么写_推荐的MyBatis传参方式List、数组等

    MyBatis 推荐的传参方式 如果要详细的学习 MyBatis,推荐看这个教程:https://www.w3cschool.cn/mybatis/ 1. 单个参数//接口方法int getAgeBy ...

  6. Python函数传参方式超级大汇总

    位置参数 位置参数传递是最为简单的传递方式,按照函数参数的位置顺序逐个匹配传入,传入参数的个数必须与函数参数个数一致. 见示例1,根据位置顺序进行匹配,a,b,c分别赋值为2,3,4 示例1 def ...

  7. 指针数组的初始化和遍历,并且通过for循环方式、函数传参方式进行指针数组的遍历...

    1 /************************************************************************* 2 > File Name: messa ...

  8. Spring Boot 传参方式

    2019独角兽企业重金招聘Python工程师标准>>> 最近在搞Spring Boot的项目,把传参方式总结一下.网上也参考一些文章,总结的很不错,这里借鉴一下. 注解 @Reque ...

  9. axios链接带参数_axios常见传参方式

    1:get请求 一般发送请求是这么写 axios.get('/user?id=12345&name=user') .then(function (res) { console.log(res) ...

最新文章

  1. pthread_cond_wait() 函数的使用
  2. php mysql网站导航跳转_PHP微信公众平台跳转网页实现定位思路 By:阿尚
  3. 两边放动物对战守城的游戏_集合啦!动物森友会定制周边;百战天虫 大混战发布...
  4. VNX证书过期解决方案(2018-11-02)
  5. Leetcode 344. 反转字符串 解题思路及C++实现
  6. Javascript编写的简易计算器
  7. 玩转spring boot——结合redis
  8. Duilib教程-控件练习
  9. Access 时间比较错误
  10. java传输文件暂停_java – 在文件下载中实现暂停/恢复
  11. 一张图学会python 3_一张图学会Python?想啥呢?!
  12. OPPO推送:怎样开通?
  13. 解决:‘webpack-dev-server‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
  14. 侧方位停车技巧图解 教你快速便捷停车(图)
  15. ICPC World Finals 2015 D题 - Cutting Cheese 【二分答案】【球缺体积公式】
  16. WebSocket服务端消息推送
  17. 苏阳乐队杭州巡演后记
  18. 乔戈里推荐的新版Java学习路线,开源!
  19. 重庆计算机专业在职研究生,重庆师范大学在职研究生计算机专业教学方式
  20. java秒表程序_运用Java编写 秒表程序

热门文章

  1. 结构体所占字节数的计算
  2. 徐无忌MySQL笔记:MySQL数据库锁有几种?实现原理是什么?
  3. redis内存回收——过期、淘汰
  4. android 程序中设置默认输入法
  5. 为Synaptics驱动的触摸板安装精确式触摸板
  6. cmdb python 采集虚拟机_CMDB学习之八,完成所有资产采集信息的收集
  7. linux centos 访问根目录 not accessable
  8. __ratelimit: XXX callbacks suppressed
  9. 2022-09-12 mysql语法分析实现
  10. 宏源药业上市破发:跌幅16% 公司市值168亿超募17亿